2013-12-10 97 views
0

例如字符串是JD85DS8796如何seprate字母數字字符串轉換成數字和字母

有4個文本視圖和我想設置像每個文本視圖:

在第一文本的視圖JD,在第二文本 - 查看85,查看第3個文本視圖DS,查看第4個文本查看8796

+0

你有什麼到目前爲止已經試過? –

+0

我不認爲有任何內置的方法..你可能不得不爲此編寫一個算法..到目前爲止你有什麼嘗試? –

+1

這是您的動態/靜態字符串? – Saj

回答

0

嘗試這種方式,這將讓你的數字值,那麼剩餘的字符串可以分離爲字符串

Pattern p = Pattern.compile("\\d+"); 
Matcher m = p.matcher("JD85DS8796"); 
m.find(); 
String inputInt = m.group(); 
textview.setText(inputInt); 
1

首先是有一個瘋狂的正則表達式可以給你的String.split:

"[^A-Z0-9]+|(?<=[A-Z])(?=[0-9])|(?<=[0-9])(?=[A-Z])" 

這意味着分割上不是數字或大寫字母,以及任何字符序列如任何大寫字母后跟數字或任何數字後面跟大寫字母的情況。這裏的技巧是匹配大寫字母和數字之間的空格(反之亦然),而不消耗字母或數字。爲此,我們使用後視來匹配拆分前的部分,並在拆分後匹配部分。

但是,正如您可能已經注意到的那樣,上述正則表達式比您的VALID_PATTERN複雜得多。這是因爲你真正在做的是試圖從字符串中提取某些部分,而不是分割它。

因此,找到匹配模式並將它們放入列表中的所有字符串部分是解決問題的更自然的方法。這就是你的代碼所做的事情,但它是以不必要的複雜方式實現的。您可以大大簡化你的代碼,只需使用Pattern.matcher這樣的:

private static final Pattern VALID_PATTERN = Pattern.compile("[0-9]+|[A-Z]+"); 

private List<String> parse(String toParse) { 
List<String> chunks = new LinkedList<String>(); 
Matcher matcher = VALID_PATTERN.matcher(toParse); 
while (matcher.find()) { 
    chunks.add(matcher.group()); 
    } 
return chunks; 
} 

如果你做這樣的事不止一次,你可能要將此方法的主體重構爲一個方法的findAll更是把字符串和模式作爲參數,然後在解析時將其稱爲findAll(toParse,VALID_PATTERN)。

+2

如果它適合您,不要忘記將其標記爲已接受。 – akshay

相關問題