Java字符串格式
我有一个字符串,例如“90 60 90”-身体比例。我想从字符串中取出3个数字,并将它们放入int数组中。 像这样: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) {
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)但这只是关于我的here@Eugene它确实看起来更干净,我会确保在将来的回答中记住这一点。不知什么原因,我总是习惯于使用s.split(“”
),而不考虑其他任何事情。谢谢你,尤金,在适当的情况下,你一定会记住这一点。@Aominè习惯很难改变,对我来说没有什么不同。除了array.asList(size).stream()
,你可以直接流式处理数组:stream.of(size)
或Arrays.stream(size)
@Yevhenii Ivanisenko,这个解决方案为您提供了多维数组,我认为您最初是在您的帖子中努力实现的。我推断这是因为注释掉了多维数组的代码。如果需要,这种方法也可以扩展。