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字符串碎片的主要内容,如果未能解决你的问题,请参考以下文章