从字符串中提取浮点值
我有一个很长的字符串,如"abc_12.23;dcf_23.99;dfa_12.99;
等等。从字符串中提取浮点值
现在我需要创建一个分别浮动和字符串值分别浮动和字符串数组。
我尝试将它们分解为“;”并把它放在一个数组中,然后对“_”进行分割并将它们提取到一个数组中。但它不起作用。谁可以帮我这个事??
可以说,使用的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());
}
您的解决方案很好。
Followig接近位提高性能:
- 迭代的所有字符转换为字符串。
- 当您找到“_”或“;”从最后一个相同的字符复制子字符串(如果当前的 ;解析的是float,则它比被解析的字符串)并且推入 适当的数组。
不确定您的提升性能如何。
注意:我不是java pro,但是如果java允许由几个字符串分隔开“;”和“_”,对于浮点数使用奇数索引,对于字符串不使用奇数索引。
好的建议,你可以发布一些代码? – Aubin 2013-02-19 14:10:05
我没有java编译器=(如果你想我可以在C#上发布。 – 2013-02-19 14:11:56
这里有一个正则表达式的解决方案:
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]
试试这个正则表达式:
(\w.)_(\d.\.\d.);
测试在这里A Regular Expression Test Applet
使用matcher.find()
来逐步完成比赛。
组3(索引2)将具有浮点值。
您可以使用扫描仪。它看起来像这样:
scanner = Scanner("abc_12.23;dcf_23.99;dfa_12.99;");
scanner.useDelimiter("[;_]");
while(scanner.hasNext()){
String s = scanner.next();
float f = scanner.nextFloat();
}
除非你决定使用真正的序列化,如JSON,这是一个很好的方法。下一个问题。 – 2013-02-19 14:01:11
我们不知道你有没有看到任何代码的最佳解决方案。 – jlordo 2013-02-19 14:01:15
问题的最佳解决方案通常是最容易的解决方案。如果这个解决方案对你来说很简单,那就去吧 – imulsion 2013-02-19 14:01:22