我有一个文本文件包含:
1 1 0 0
1 2 0 0
1 0 1 0
1 0 2 0
1 0 0 1
1 0 0 2
2 1 0 0
2 2 0 0
2 0 1 0
2 0 2 0
2 0 0 1
2 0 0 2
然后,我把内容放在arraylist中。结果与文件中的结果相同。 接下来,我想逐个处理数据,并将内容的每一行放在数组[] []中,其中数据将按行分隔。 结果将是这样的:
output[0][]={1 1 0 0}
output[1][]={1 2 0 0}
output[2][]={1 0 1 0}
output[3][]={1 0 2 0}
....
....
....
问题, 我怎样才能将arraylist中的字符串变为分离数据? 我在java中编码
谢谢
答案 0 :(得分:1)
您可以使用“public String [] split(String regexp)”方法通过指定在参数中拆分的字符将字符串拆分为数组。 例如 String temp =“1 2 3 4”; temp.split(“”); 你会在你的情况下用空格分开..
答案 1 :(得分:1)
正如@Benoit所说,您可以使用String#split(regex)
分割每一行,如下所示:
String line = ...;
String[] parts = line.split( "\\s+" ); //split on whitespace
请注意,前导空格可能会在开头导致空字符串,即“1 2 3 4”会导致{"", "1", "2", "3", "4"}
。您也可以使用StringUtils
方法处理的Apache Commons Lang类split(...)
。
还要注意表达式\s+
,它也会在多个空格上分割,即“1 2 3 4”仍会产生{"1", "2", "3", "4"}
。
然后,您可以将各个部分解析为整数等。
答案 2 :(得分:0)
这是一些真正的简单代码,它使用扫描仪完成所有工作,并且每行处理任意数量的数字。
已编辑:注意选择List<List<Integer>>
的返回类型为int[][]
以上的理智选择
public static List<List<Integer>> parseIntArrays(InputStream in) {
Scanner s = new Scanner(in);
List<List<Integer>> list = new ArrayList<List<Integer>>();
while (s.hasNextLine()) {
Scanner ns = new Scanner(s.nextLine());
List<Integer> nums = new ArrayList<Integer>();
list.add(nums);
while (ns.hasNextInt())
nums.add(ns.nextInt());
}
return list;
}
以下是一些执行乐趣的测试代码:
public static void main(String[] args) {
String input = "1 0 0\n1 2 0 0\n1 0 1 0\n1 0 2 0 0 0 1\n1";
List<List<Integer>> result = parseIntArrays(new ByteArrayInputStream(input.getBytes()));
for (List<Integer> line : result)
System.out.println(line);
}
输出:
[1, 0, 0]
[1, 2, 0, 0]
[1, 0, 1, 0]
[1, 0, 2, 0, 0, 0, 1]
[1]
答案 3 :(得分:-1)
问题是:为什么使用二维数组存储数据? 按新行解析文件。对于每个新行,将该行添加到数组列表中。 对于数组列表中的每个元素,只需将其添加到数组中即可。我写了一个简单的程序。 它假设您已经解析了该文件,并使用新行填充了ArrayList。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1 0 1 1");
list.add("1 1 1 1");
// etc
String[][] array = new String[list.size()][list.size()];
int i = 0;
for (String s : list) {
stringArray[i++][0] = s;
}
for (int y = 0 ; y < array.length; y++) {
System.out.println(stringArray[y][0]);
}
}