我有一长串"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 方法稍微提高了性能:
不确定您是否会大大提高性能。
注意:我不是java专业人士,但如果java允许被几个字符溢出,只需用“;”分隔 和“_” 并为浮点数使用奇数索引,而对字符串使用奇数索引。
这是一个正则表达式解决方案:
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]
您可能会使用Scanner。它看起来像这样:
scanner = Scanner("abc_12.23;dcf_23.99;dfa_12.99;");
scanner.useDelimiter("[;_]");
while(scanner.hasNext()){
String s = scanner.next();
float f = scanner.nextFloat();
}