Java字符串格式

Java字符串格式,java,string,int,Java,String,Int,我有一个字符串,例如“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) {

我有一个字符串,例如“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);
    }
} 
公共类主{
公共静态void main(字符串[]args){
字符串[]大小={“906090”,“907060”};
//int[]firstNumber=新的int[size.length][3];
字符串firstNumber=“”;
字符串secondNumber=“”;
字符串thirdNumber=“”;
int空间=0;
对于(int i=0;i

谢谢。

使用流是一种优雅的方式。i、 e:

要检索
字符串
数组,请执行以下操作:

String[] result = Arrays.stream(sizes)
                        .flatMap((String s) -> Arrays.stream(s.split(" ")))
                        .toArray(String[]::new);
int[] result = Arrays.stream(sizes)
                     .flatMap((String s) -> Arrays.stream(s.split(" ")))
                     .mapToInt(Integer::parseInt)
                     .toArray();
要检索
int
数组,请执行以下操作:

String[] result = Arrays.stream(sizes)
                        .flatMap((String s) -> Arrays.stream(s.split(" ")))
                        .toArray(String[]::new);
int[] result = Arrays.stream(sizes)
                     .flatMap((String s) -> Arrays.stream(s.split(" ")))
                     .mapToInt(Integer::parseInt)
                     .toArray();
您可以使用:

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());
输出

[90, 60, 90]
[90, 70, 60]

另一种可能性是:

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));

    }
}

比streams更简单的方法是使用StringTokenizer。其构造函数的参数是要分隔的字符串。调用方法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]

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

公共类主{
公共静态void main(字符串[]args){
字符串[]大小={“906090”,“907060”};
字符串元素;
字符串[]sizeArray;
int[]sizeIntArray=新的int[size.length][3];
对于(int i=0;i
String::split
int[]array=Stream.of(String.split(“”)).mapToInt(Integer::parseInt.toArray()看起来应该可以工作了。我试试看,谢谢。我是个新手。我试图寻找合适的方法,但我找不到这个简单的函数,因为我还没有学会ArrayList和Streams这样的结构。谢谢你。你要变得复杂,尽量使用标准的功能(
String::split
),这样你就可以把所有的东西都放在一个数组中了。这是期望的结果吗?@Ward就我所知,从描述来看似乎是这样的,同时考虑到公认的答案,这澄清了OP想要一个一维数组。@Aominè我觉得这有点干净<代码>模式p=Pattern.compile(“”);数组.stream(size).flatMap(p::splitAsStream).toArray(String[]::new)s.split(“”
),而不考虑其他任何事情。谢谢你,尤金,在适当的情况下,你一定会记住这一点。@Aominè习惯很难改变,对我来说没有什么不同。除了
array.asList(size).stream()
,你可以直接流式处理数组:
stream.of(size)
Arrays.stream(size)
@Yevhenii Ivanisenko,这个解决方案为您提供了多维数组,我认为您最初是在您的帖子中努力实现的。我推断这是因为注释掉了多维数组的代码。如果需要,这种方法也可以扩展。