我有一个包含几个数字(通常是日期)和分隔符的字符串。分隔符可以是“,”或“。” - 或例子01.05,2000.5000Java - 从字符串中分离数字
....现在我需要将这些数字分开并放入一个数组,但我不知道如何做到这一点(分离部分)。另外,我需要检查字符串是否有效 - 它不能是01. 05。
我不要求任何人都可以解决的事情,我(但如果有人想我很感激它),只是点我朝着正确的方向:)
我有一个包含几个数字(通常是日期)和分隔符的字符串。分隔符可以是“,”或“。” - 或例子01.05,2000.5000Java - 从字符串中分离数字
....现在我需要将这些数字分开并放入一个数组,但我不知道如何做到这一点(分离部分)。另外,我需要检查字符串是否有效 - 它不能是01. 05。
我不要求任何人都可以解决的事情,我(但如果有人想我很感激它),只是点我朝着正确的方向:)
这是StringTokenizer类做的一种方式,只是重复的令牌,如果获取的令牌是空的,那么你有一个无效的字符串,也由parseInt方法令牌转换为整数检查它们是否有效整数:
import java.util.*;
public class t {
public static void main(String... args) {
String line = "01.05,2000.5000";
StringTokenizer strTok = new StringTokenizer(line, ",.");
List<Integer> values = new ArrayList<Integer>();
while (strTok.hasMoreTokens()) {
String s = strTok.nextToken();
if (s.length() == 0) {
// Found a repeated separator, String is not valid, do something about it
}
try {
int value = Integer.parseInt(s, 10);
values.add(value);
} catch(NumberFormatException e) {
// Number not valid, do something about it or continue the parsing
}
}
// At the end, get an array from the ArrayList
Integer[] arrayOfValues = values.toArray(new Integer[values.size()]);
for (Integer i : arrayOfValues) {
System.out.println(i);
}
}
}
为字符串,采用分体式分离( ),该方法的参数是分隔符
array = string.split(“separator”);
'split()'需要使用正则表达式,这就是为什么我删除了我的答案 –
首先,必须检查字符串是否有效,然后才可以使用拆分方法,我认为 – scgr
遍历String#split(regex)
生成的数组并检查每个值以确保您的源String
是“有效的”。
在:
String src = "01.05,2000.5000";
String[] numbers = src.split("[.,]");
numbers
这里将是Strings
阵列,像{"01", "05", "2000", "5000"}
。每个值都是一个数字。
现在迭代numbers
。如果您发现索引不是数字(这是numbers[i].matches("\\d+")
为true
时的数字),那么您的src
无效。
要验证:
if (input.matches("^(?!.*[.,]{2})[\\d.,]+))
此正则表达式检查的是:
要拆分:
String[] numbers = input.split("[.,]");
谢谢。它的工作正常。你能帮我学习如何轻松学习正则表达式。 –
先生,不应该'数字'是一个数组作为分裂函数返回一个数组? –
@RaviTrivedi OOPS!离开方括号。谢谢 – Bohemian
使用正则表达式来组和匹配输入
String s = "01.05,2000.5000";
Pattern pattern = Pattern.compile("(\\d{2})[.,](\\d{2})[.,](\\d{4})[.,](\\d{4})");
Matcher m = pattern.matcher(s);
if(m.matches()) {
String[] matches = { m.group(1),m.group(2), m.group(3),m.group(4) };
for(String match : matches) {
System.out.println(match);
}
} else {
System.err.println("Mismatch");
}
如果可能的话,我会用番石榴的String为此而分解。它比String#split
更可靠,更可预测,更灵活。您可以准确地告诉它期望什么,省略什么,等等。
举一个例子使用,以及如何愚蠢的Java类split
有时相当于一个小的咆哮,看看这里:http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
试试这个:
String str = "01.05,2000.5000";
str = str.replace(".",",");
int number = StringUtils.countMatches(str, ",");
String[] arrayStr = new String[number+1];
arrayStr = str.split(",");
StringUtils
为Apache Commons
>>http://commons.apache.org/proper/commons-lang/
'String#split(...)'允许使用正则表达式作为分隔符。我会试验一下。所有你需要的东西都非常简单。 –
您的字符串是否包含“,”和“。”都在一个单一的字符串? –
@JDeveloper我会说是,因为他的例子都有。 – FDinoff