如何将一行字母数字字符串转换为3个不同的部分

时间:2017-04-10 18:17:24

标签: java arrays string split

假设我从扫描仪获得以下输入:"5B1 2B2 9B3 1R4 3R5 8R6 10R7"

我希望将数据保存在与此类似的内容中:

array[0]  = {5,B,1}
array[1]  = {2,B,2}

注意:我需要角色左侧的数字保存为全部 示例:我需要将10R7保存为{10,R,7}而不是{1,0,R,7}

使用此:

String input = scanner.nextLine();
String[] nodes = input.split(" ");

我能够实现包含{5B1,3B2}等的数组。

修改

我尝试了这种方法(WORKS):

String[][] aa = new String[nodes.length][];
for(int i =0; i<nodes.length; i++ ){
   aa[i] = nodes[i].split("((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))");
}

如果您立即打印,则会发生这种情况:

   [Ljava.lang.String;@55f96302
   [Ljava.lang.String;@3d4eac69
   [Ljava.lang.String;@42a57993
   [Ljava.lang.String;@75b84c92
   [Ljava.lang.String;@6bc7c054
   [Ljava.lang.String;@232204a1
   [Ljava.lang.String;@4aa298b7

如果我尝试使用以下方法打印,则只会出现上述问题:

System.out.println(aa[i]);

还有另一种打印方式,但我不需要打印它。

5 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    String str = in.nextLine(); // Read 5B1 2B2 9B3 1R4 3R5 8R6 10R7 from user

    String[] sArr = str.split(" "); // break into array of string ["5B1", "2B2", .... "10R7"]

    char[][] cArr = new char[sArr.length][]; // create a 2D char array to save the string array
    int idx = 0;

    for(String s : sArr){
        cArr[idx++] = s.toCharArray(); // [['5','B','1'], ['2','B','2'], ...]
    }

    //Print the array
    for(char[] c1 : cArr){
        for(char c2: c1){
            System.out.print(c2 + " ");
        }
        System.out.println();
    }
}

enter image description here

答案 1 :(得分:1)

您可以使用拆分\\s来获取您的文字,然后您可以将s.toCharArray()用于char数组:

String str = "5B1 2B2 9B3 1R4 3R5 8R6 10R7";
List<String[]> list = new ArrayList<>();
String spl[] = str.split("\\s+");

for (String s : spl) {
   String sp[] = s.replaceAll("([a-zA-Z]+)", "$1-").replaceAll("([0-9]+)", "$1-").split("-");
   list.add(sp);
}

打印阵列:

list.forEach((rs) -> {
    System.out.println(Arrays.toString(rs));
});

这可以为您提供:

[5, B, 1]
[2, B, 2]
[9, B, 3]
[1, R, 4]
[3, R, 5]
[8, R, 6]
[10, R, 7]

答案 2 :(得分:1)

好吧,经过一些游戏,我发现了一个修复:

对于任何可能在此处有类似内容的人来说:

Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] nodes = input.split(" ");

String[][] aa = new String[nodes.length][];

for (int i = 0; i < nodes.length; i++) {
    aa[i] = nodes[i].split("((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))");
}

答案 3 :(得分:0)

以下是样本:

public static void main(String args[]) {
    String s = "5B1 2B2 9B3 1R4 3R5 8R6 10R7";

    // split input string by spaces first
    // convert every chunk into char array
    List<char[]> result =
            Arrays.asList(s.split(" ")).stream().map(String::toCharArray).collect(Collectors.toList());

    for (char[] r : result) {
        System.out.println(Arrays.toString(r));
    }
}

输出:

[5, B, 1]
[2, B, 2]
[9, B, 3]
[1, R, 4]
[3, R, 5]
[8, R, 6]
[1, 0, R, 7]

答案 4 :(得分:0)

只需拆分字符串

String str = "5B1 2B2 9B3 1R4 3R5 8R6 10R7"
String[] parts = str.split(" ");
for (int i = 0; i < parts.length; i++) {
  System.out.println(parts[i]);
}