gpt4 book ai didi

java - 从文本文件 : IndexOutOfBounds 中分割字符串

转载 作者:行者123 更新时间:2023-12-02 06:54:07 32 4
gpt4 key购买 nike

我有一个看起来像这样的文本文件:

Aaaaa      0.55     2
bbb 2.1 0.25
ccccc 71 21
..... ... ...
ZzZz 0.725 42.92
Total: 746.54

我试图获取每一列并将其放置在每列的 String[] 中。readprod[] 将是第一列,readcant[] 是第二列,readpret[] 是第三列。

    String[] readprod;
String[] readcant;
String[] readpret;
int nrz;
int lineCount;
String[] columns;
nrz = 0;
File root = android.os.Environment
.getExternalStorageDirectory();

File dir = new File(root.getAbsolutePath() + "/.InterSRL");
dir.mkdirs();
final File file = new File(dir, str);

try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;

lineCount = 0;
while ((line = br.readLine()) != null) {

lineCount++;
}

} catch (IOException e) {
// You'll need to add proper error handling here
}

readprod = new String[lineCount];
readpret = new String[lineCount];
readcant = new String[lineCount];

// Read text from file
StringBuilder text = new StringBuilder();

try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;

while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
columns = line.split("\\s+");
readprod[nrz] = columns[0];
readcant[nrz] = columns[1];
readpret[nrz] = columns[2];
nrz++;

}

问题是我得到 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 位于 readcant[nrz] = columns[1];

有什么问题吗?有没有更好的方法从文本文件中读取列并将它们放置在每列的不同字符串或数组列表中?

另外:当它们之间的空格超过 3 个时,有没有办法将它们分开?我刚刚意识到第一列,带有名称的列可以有一个值,例如,Fish Sticks 200g..该死...

编辑:我这样做了:

columns = line.split("\\s+");
readprod[nrz] = columns[0];
Log.d("Listener", "Columns[0]= "+columns[0]);
readcant[nrz] = columns[1];
Log.d("Listener", "Columns[1]= "+columns[1]);
readpret[nrz] = columns[2];
Log.d("Listener", "Columns[2]= "+columns[2]);
nrz++;

这就是我得到的:

07-13 01:55:43.570: D/Listener(15805): Columns[0]= Bulion
07-13 01:55:43.570: D/Listener(15805): Columns[1]= 1
07-13 01:55:43.570: D/Listener(15805): Columns[2]= 2.25
07-13 01:55:43.570: D/Listener(15805): Columns[0]=
07-13 01:55:43.570: D/AndroidRuntime(15805): Shutting down VM
07-13 01:55:43.570: W/dalvikvm(15805): threadid=1: thread exiting with uncaught exception (group=0x40d42930)
07-13 01:55:43.575: E/AndroidRuntime(15805): FATAL EXCEPTION: main
07-13 01:55:43.575: E/AndroidRuntime(15805): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
07-13 01:55:43.575: E/AndroidRuntime(15805): at com.example.testlayout.Administrare$1.onItemClick(Administrare.java:161)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.widget.AbsListView$1.run(AbsListView.java:3423)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.os.Handler.handleCallback(Handler.java:725)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.os.Handler.dispatchMessage(Handler.java:92)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.os.Looper.loop(Looper.java:137)
07-13 01:55:43.575: E/AndroidRuntime(15805): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-13 01:55:43.575: E/AndroidRuntime(15805): at java.lang.reflect.Method.invokeNative(Native Method)
07-13 01:55:43.575: E/AndroidRuntime(15805): at java.lang.reflect.Method.invoke(Method.java:511)
07-13 01:55:43.575: E/AndroidRuntime(15805): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-13 01:55:43.575: E/AndroidRuntime(15805): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-13 01:55:43.575: E/AndroidRuntime(15805): at dalvik.system.NativeStart.main(Native Method)

所以问题是当他到达第二排时..

最佳答案

Is there a way to split them when there's more then 3 spaces between them?

是的,使用这个正则表达式“\\s{3,}”这意味着3个或更多空格

See more on Regular Expressions here

还有你的最后一行

Total: 746.54

除非你处理它,否则会导致问题

读完该行后,您在文件中得到了什么?

您可以放入 if 来检查列的长度是否为 3

if(columns.length == 3)
// Assign your values
else
// Log error in reading

关于java - 从文本文件 : IndexOutOfBounds 中分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17625141/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com