Java字符串碎片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串碎片相关的知识,希望对你有一定的参考价值。

我有一个字符串,例如“90 60 90” - 身体比例。我想从字符串中提取3个数字并将它们放入int数组中。像这样:

sizes[0] = 90;
sizes[1] = 60;
sizes[2] = 90;

也许有更优雅的方式来解决这个问题,但我只能这样想出来。如果你能告诉我更优雅的方式或帮助解决这个问题,我会很高兴。当j = 2且a =''时,循环以这种方式停止。

public class Main {

    public static void main(String[] args) {

        String[] sizes = {"90 60 90", "90 70 60"};
    //  int[][] firstNumber = new int[sizes.length][3];
        String firstNumber = "";
        String secondNumber = "";
        String thirdNumber = "";
        int spaces = 0;

        for (int i = 0; i < sizes.length; i++) {
            int length = sizes[i].length();
            for (int j = 0; j < length; j++) {
                char a = sizes[j].charAt(j);
                if (a != ' ' && spaces == 0) {
                    firstNumber += String.valueOf(a);
                } else if (a != ' ' && spaces == 1) {
                    secondNumber += String.valueOf(a);
                } else if (a != ' ' && spaces == 2) {
                    thirdNumber += String.valueOf(a);
                } else if (a == ' ') {
                    spaces++;
                }
            }
        }
        System.out.println(firstNumber + secondNumber + thirdNumber);
    }
} 

谢谢。

答案

比stream更简单的方法是使用StringTokenizer。其构造函数的参数是您要分离的String。调用nextToken方法跳转到下一个标记(在本例中为90到60)。如果没有参数,则标记由空格分隔。这里是:

import java.util.Arrays;
import java.util.StringTokenizer;

public class test {

    public static void main(String[] args) {

        String[] sizes = {"90 60 90", "90 70 60"};
        StringTokenizer st = new StringTokenizer(sizes[0]);
        int[] sizesInt = new int[6];
        sizesInt[0] = Integer.parseInt(st.nextToken());
        sizesInt[1] = Integer.parseInt(st.nextToken());
        sizesInt[2] = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(sizes[1]);
        sizesInt[3] = Integer.parseInt(st.nextToken());
        sizesInt[4] = Integer.parseInt(st.nextToken());
        sizesInt[5] = Integer.parseInt(st.nextToken());

        System.out.println("sizesInt: " + Arrays.toString(sizesInt));

    }

}

输出:

sizesInt: [90, 60, 90, 90, 70, 60]
另一答案

您可以使用 :

String[] sizes = {"90 60 90", "90 70 60"};
List<Integer[]> list = Stream.of(sizes).map(
        string -> Arrays.asList(string.split("\s+")).stream()
                .map(s -> Integer.parseInt(s))
                .toArray(Integer[]::new)
).collect(toList());

要显示结果:

list.forEach(array -> System.out.println(Arrays.asList(array)));

输出

[90, 60, 90]
[90, 70, 60]
另一答案

一种优雅的方式是使用流。即:

检索String数组:

String[] result = Arrays.stream(sizes)
                        .flatMap((String s) -> Arrays.stream(s.split(" ")))
                        .toArray(String[]::new);

检索int数组:

int[] result = Arrays.stream(sizes)
                     .flatMap((String s) -> Arrays.stream(s.split(" ")))
                     .mapToInt(Integer::parseInt)
                     .toArray();
另一答案

另一种可能性是:

public class StringToArray {

    // we use this as index counter in our lambda (effectively final)
    private static int index = 0;

    public static void main(String[] args) {

     // our String
     String s = "90 60 90";

     // we declare and initialize our int array to store
     // converted Strings to
     int[] array = new int[s.split(" ").length];

        // split by space, get an array, get stream out of 
        // that array, map each String value to int and save
        // to appropriate index in our int array
        Arrays.stream(s.split(" "))
              .map(Integer::parseInt)
              .forEach(x -> array[index++] = x);

        // print out int array content
        System.out.println(Arrays.toString(array));

    }
}
另一答案

另一种使用单个for循环和拆分器填充多维数组的方法。应该是有效率的。多维数组是保持身体比例信息的直观方式,每行包含与特定身体相关的内聚数据。可扩展而无需根据需要更改任意数量的数据行。在jdoodle测试

public class Main {

    public static void main(String[] args) {

        String[] sizes = {"90 60 90", "90 70 60"};
        String element;
        String[] sizeArray;
        int[][] sizeIntArray= new int[sizes.length][3];

        for (int i = 0; i < sizes.length; i++) {
            element = sizes[i];
            sizeArray=element.split("\s");
            sizeIntArray[i][0]=Integer.parseInt(sizeArray[0]);
            sizeIntArray[i][1]=Integer.parseInt(sizeArray[1]);
            sizeIntArray[i][2]=Integer.parseInt(sizeArray[2]);
            }
    }
}

以上是关于Java字符串碎片的主要内容,如果未能解决你的问题,请参考以下文章

在ViewPager中看不到碎片

中继现代碎片容器,道具不自动可用

从容器中删除所有碎片

我对回收站视图和碎片有疑问?

方向改变时碎片堆叠的行为

如何处理地图碎片按钮?