我有一個包含幾個數字(通常是日期)和分隔符的字符串。分隔符可以是「,」或「。」 - 或例子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