Java 读取文本文件并将其拆分为数组-Android
我已经问了很多这样的问题,但似乎还是弄不明白。我把一个文本文件分成了几行。每行由5条数据组成,数据之间用“,”分隔。我正在尝试读取此文件,并将信息拆分为以下形式的字符串数组:Java 读取文本文件并将其拆分为数组-Android,java,android,arrays,text,split,Java,Android,Arrays,Text,Split,我已经问了很多这样的问题,但似乎还是弄不明白。我把一个文本文件分成了几行。每行由5条数据组成,数据之间用“,”分隔。我正在尝试读取此文件,并将信息拆分为以下形式的字符串数组: String [][] xyz = new String [5][100]; 有人能帮我一个简单的解决办法吗!?谢谢!!!:) 数据示例: John,22,1953,Japan,Green Anna,18,2012,Mexico,Blue Sam,34,1976,San Francisco,Pink 示例代码: 公共
String [][] xyz = new String [5][100];
有人能帮我一个简单的解决办法吗!?谢谢!!!:)
数据示例:
John,22,1953,Japan,Green
Anna,18,2012,Mexico,Blue
Sam,34,1976,San Francisco,Pink
示例代码:
公共void readFile(){
错误
07-24 06:26:56.524:E/AndroidRuntime(27203):致命异常:主
07-24 06:26:56.524:E/AndroidRuntime(27203):java.lang.ArrayIndexOutofBounds异常:长度=10;索引=10
07-24 06:26:56.524:E/AndroidRuntime(27203):位于com.testingReadArray.weebly.testingReadArray.MainActivity.readFile(MainActivity.java:182)
07-24 06:26:56.524:E/AndroidRuntime(27203):在com.testingReadArray.weebly.testingReadArray.MainActivity$planOnClickListener.onItemSelected上(MainActivity.java:148)
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.widget.AdapterView.fireOnSelected(AdapterView.java:895)
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.widget.AdapterView.access$200(AdapterView.java:50)
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:863)
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.os.Handler.handleCallback(Handler.java:615)上
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.os.Handler.dispatchMessage(Handler.java:92)上
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.os.Looper.loop(Looper.java:137)
07-24 06:26:56.524:E/AndroidRuntime(27203):在android.app.ActivityThread.main(ActivityThread.java:4867)上
07-24 06:26:56.524:E/AndroidRuntime(27203):位于java.lang.reflect.Method.Invokenactive(本机方法)
07-24 06:26:56.524:E/AndroidRuntime(27203):位于java.lang.reflect.Method.invoke(Method.java:511)
07-24 06:26:56.524:E/AndroidRuntime(27203):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
07-24 06:26:56.524:E/AndroidRuntime(27203):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
07-24 06:26:56.524:E/AndroidRuntime(27203):在dalvik.system.NativeStart.main(本机方法)我假设您了解读取文件的基本知识。因此,让我们从字符串等于一整行的位置开始:
String s = "John,22,1953,Japan,Green";
您可以调用split()函数来返回由某个表达式(在本例中为逗号)细分的数组,如下所示:
然后是第[0]=“John”,第[1]=22行,依此类推。您可以使用这些数组执行任何操作,包括将它们存储在多维数组中(如果您希望执行此操作)
String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"
希望这一点很清楚,我也理解了您试图正确执行的操作。我假设您理解了读取文件的基本知识。因此,让我们从字符串s等于一整行的位置开始:
String s = "John,22,1953,Japan,Green";
您可以调用split()函数来返回由某个表达式(在本例中为逗号)细分的数组,如下所示:
然后是第[0]=“John”,第[1]=22行,依此类推。您可以使用这些数组执行任何操作,包括将它们存储在多维数组中(如果您希望执行此操作)
String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"
希望这是清楚的,我理解了您试图正确执行的操作。您可以使用BufferedReader读取每一行,然后使用
.split(',');
方法拆分该行
一些伪代码:
BufferedReader bfr = new BufferedReader(InputStreamReader/FileReader...);
String line = null;
int index = 0;
String [][] xyz = new String [100][5];
while ( (line = bfr.readLine()) != null) {
if (index < xyz.length) xyz[index] = line.split(",");
index++;
}
BufferedReader bfr=新的BufferedReader(InputStreamReader/FileReader…);
字符串行=null;
int指数=0;
字符串[][]xyz=新字符串[100][5];
而((line=bfr.readLine())!=null){
如果(索引
希望这有帮助!您可以使用BufferedReader读取每一行,然后使用
.split(',');
方法拆分该行
一些伪代码:
BufferedReader bfr = new BufferedReader(InputStreamReader/FileReader...);
String line = null;
int index = 0;
String [][] xyz = new String [100][5];
while ( (line = bfr.readLine()) != null) {
if (index < xyz.length) xyz[index] = line.split(",");
index++;
}
BufferedReader bfr=新的BufferedReader(InputStreamReader/FileReader…);
字符串行=null;
int指数=0;
字符串[][]xyz=新字符串[100][5];
而((line=bfr.readLine())!=null){
如果(索引
希望这有帮助!请参阅使用缓冲读取器逐行读取文件的示例,然后将其与Kon的答案结合起来,我认为您已经找到了解决方案
AssetManager manger;
String line = null;
List<String[]> xyzList = new ArrayList<String[]>();
String[][] xyz;
InputStream is;
InputStreamReader isr;
BufferedReader br;
try {
manger = getAssets();
is = manager.open("data.txt");
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
xyzList.add(line.split(","));
}
xyz = (String[][])xyzList.toArray();
}catch (IOException e1) {
Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
}finally{
br.close();
isr.close();
is.close();
}
AssetManager经理;
字符串行=null;
List xyzList=new ArrayList();
字符串[][]xyz;
输入流为;
输入流读卡器isr;
缓冲剂;
试一试{
manger=getAssets();
is=manager.open(“data.txt”);
isr=新的InputStreamReader(is);
br=新的缓冲读取器(isr);
而((line=br.readLine())!=null){
xyzList.add(line.split(“,”);
}
xyz=(字符串[][])xyzList.toArray();
}捕获(IOE1异常){
Toast.makeText(getBaseContext(),“Problem!”,Toast.LENGTH\u SHORT.show();
}最后{
br.close();
isr.close();
is.close();
}
请参阅使用缓冲读取器逐行读取文件的示例,然后将其与Kon的答案结合起来,我认为您已经找到了解决方案
AssetManager manger;
String line = null;
List<String[]> xyzList = new ArrayList<String[]>();
String[][] xyz;
InputStream is;
InputStreamReader isr;
BufferedReader br;
try {
manger = getAssets();
is = manager.open("data.txt");
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
xyzList.add(line.split(","));
}
xyz = (String[][])xyzList.toArray();
}catch (IOException e1) {
Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
}finally{
br.close();
isr.close();
is.close();
}
AssetManager经理;
字符串行=null;
List xyzList=new ArrayList();
字符串[][]xyz;
输入流为;
输入流读卡器isr;
缓冲剂;
试一试{
manger=getAssets();
is=manager.open(“data.txt”);
isr=新的InputStreamReader(is);
br=新的缓冲读取器(isr);
而((line=br.readLine())!=null){
xyzList.add(line.split(“,”);
}
xyz=(字符串[][])xyzList.toArray();
}捕获(IOE1异常){
Toast.makeText(getBaseContext(),“Problem!”,Toast.LENGTH\u SHORT.show();
}最后{
br.close();
isr.close();
is.close();
}
/*假设您希望从该数据中得到一个5×n的矩阵
约翰,221953,日本,格林
安娜,182012,墨西哥,蓝色
山姆,341976岁,旧金山,Pink
.
.
.
.
第n行
字符串[]行=s.split(“,”)*/
用于(int i)=