如何使用java将此字符串转换为二维数组

Kar*_*thi 2 java

我有文本文件

    0B85     61
    0B86     6161
    0B86     41
    0B87     69
    0B88     6969
    0B88     49
    0B89     75
    0B8A     7575
    0B8F     6565
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串写成二维数组.(即)String read[0][0]=0B85String read[0][1]=61.请使用java建议任何想法.提前致谢.

pol*_*nts 6

像这样的东西有效:

String s = "0B85 61 0B86 6161 0B86 41 0B87 69 0B88"
    + " 6969 0B88 49 0B89 75 0B8A 7575 0B8F 6565";
String[] parts = s.split(" ");
String[][] table = new String[parts.length / 2][2];
for (int i = 0, r = 0; r < table.length; r++) {
    table[r][0] = parts[i++];
    table[r][1] = parts[i++];
}
System.out.println(java.util.Arrays.deepToString(table));
// prints "[[0B85, 61], [0B86, 6161], [0B86, 41], [0B87, 69],
//   [0B88, 6969], [0B88, 49], [0B89, 75], [0B8A, 7575], [0B8F, 6565]]
Run Code Online (Sandbox Code Playgroud)

基本上你split(" ")是长串成部分,然后将部分排列成2列String[][] table.

也就是说,对此最好的解决方案是Entry为每一行设置一个类,List<Entry>而不是一个String[][].


注意:格式化,保持在上面被抛弃,但是需要跟随

如果您columns.txt包含以下内容:

    0B85     61
    0B86     6161
    0B86     41
    0B87     69
    0B88     6969
    0B88     49
    0B89     75
    0B8A     7575
    0B8F     6565
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下内容将它们排列为2列String[][]:

import java.util.*;
import java.io.*;
//...

    List<String[]> entries = new ArrayList<String[]>();
    Scanner sc = new Scanner(new File("columns.txt"));
    while (sc.hasNext()) {
        entries.add(new String[] { sc.next(), sc.next() });
    }
    String[][] table = entries.toArray(new String[0][]);
    System.out.println(java.util.Arrays.deepToString(table));
Run Code Online (Sandbox Code Playgroud)

但我会重申,a List<Entry>比a更好String[][].

也可以看看

  • Effective Java 2nd Edition,Item 25:首选列表到数组
  • 有效的Java第2版,第50项:避免使用其他类型更合适的字符串