我有一个很长的字符串,如"abc_12.23;dcf_23.99;dfa_12.99;
等等。
现在我需要创建一个将float和string值分别分隔成float和string数组。
我尝试将它们拆分为“;”并将其放入一个数组中,然后对“_”进行拆分并将其提取到一个数组中。但它没有用。谁能帮帮我呢?
答案 0 :(得分:2)
可以说,使用StringTokenizer可能会更有效率
StringTokenizer st = new StringTokenizer("abc_12.23;dcf_23.99;dfa_12.99", "_;");
int n = st.countTokens();
String[] sa = new String[n / 2];
float[] fa = new float[n / 2];
for(int i = 0 ; st.hasMoreTokens(); i++) {
sa[i] = st.nextToken();
fa[i] = Float.parseFloat(st.nextToken());
}
答案 1 :(得分:0)
你解决方案很好。
Followig方法稍微提高了性能:
不确定您的表现会有所提升。
注意:我不是java pro,但是如果java允许溢出几个字符只是用“;”分隔和“_”并使用奇数索引表示浮点数,而不是奇数表示字符串。
答案 2 :(得分:0)
这是一个正则表达式解决方案:
String input = "abc_12.23;dcf_23.99;dfa_12.99; and so on";
String regex = "([a-zA-Z]+)_(\\d+(\\.\\d+)?);?";
List<String> strings = new ArrayList<>();
List<Double> floats = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
strings.add(matcher.group(1));
floats.add(Double.valueOf(matcher.group(2)));
}
System.out.println(strings); // prints [abc, dcf, dfa]
System.out.println(floats); // prints [12.23, 23.99, 12.99]
答案 3 :(得分:0)
试试这个正则表达式:
(\w.)_(\d.\.\d.);
在此处测试A Regular Expression Test Applet
使用matcher.find()
逐步完成匹配。
第3组(索引2)将具有浮点值。
答案 4 :(得分:0)
您可以使用扫描仪。它看起来像这样:
scanner = Scanner("abc_12.23;dcf_23.99;dfa_12.99;");
scanner.useDelimiter("[;_]");
while(scanner.hasNext()){
String s = scanner.next();
float f = scanner.nextFloat();
}