我想分割一条可能如下所示的行:
6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0
第一个值是x
第二个y
。
现在我希望得到两个列表ListX<Integer>
和ListY<Double>
。
我试过用char做char。在哪里可以搜索&#39;:&#39;然后回到前面来获取号码。但必须有一个更快的方法。特别是关于能够变得非常大的弦的长度。你有什么主意吗? 感谢
答案 0 :(得分:3)
您可以尝试使用String.split()
:
String test = "6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0";
String[] splitString1 = test.split(" ");
String[] splitString2 = null;
for(String a : splitString1)
{
splitString2 = a.split(":");
System.out.println(splitString2[0]);
System.out.println(splitString2[1]);
//push splitString2[0] to x
//push splitString2[1] to y
}
答案 1 :(得分:0)
这是完成您正在考虑的事情的完整代码
import java.util.*;
public class IntegerDoubleExtractor{
public static void main(String []args){
String test = "6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0";
List<Integer> x = new ArrayList<Integer>();
List<Double> y = new ArrayList<Double>();
for(String xy : test.split(" ")) {
String xys[] = xy.split(":");
x.add(Integer.parseInt(xys[0]));
y.add(Double.parseDouble(xys[1]));
}
System.out.println(x);
System.out.println(y);
}
}
答案 2 :(得分:0)
您也可以使用Scanner
,在此过程中不需要中间字符串或数组:
Scanner scanner = new Scanner(str);
scanner.useDelimiter(Pattern.compile("[:\\s]"));
while (scanner.hasNext()) {
listX.add(scanner.nextInt());
listY.add(scanner.nextDouble());
}