2014-04-16 64 views
3

所以我有一個Java輸入形式如何刪除一切前的某個字符與字符分成組

s1,s2,s3,s4,s5,...,sn 

在那裏我有n個用逗號分隔的字符。我想在某個點分割它們,並且只在字符串中留下索引更大的字符。 假設這個代碼

String s = "a,bn,c,st1,d,kr332,23,b4,46" 

我想在C到拆分它,讓第三個星座後說,就這樣。 我想剩下的是

s="st1,d,kr332,23,b4,46" 

我想出了一個方法的字符串,但它似乎相當原始

List<String> list = Arrays.asList(s.split(",")); 
s=""; 

現在我可以有一個字符串列表,我可以通過他們喜歡迭代

for(int i=(number where i want to cut off); i<list.size(); i++){ 
s+=list.get(i); 
} 

有沒有更好的方法來做到這一點?

+1

看起來你已經標記爲正則表達式。你可以用java中的正則表達式來做到這一點。 http://docs.oracle.com/javase/tutorial/essential/regex/給它一個嘗試,如果你難住,請提出另一個問題。 – aglassman

+0

爲什麼你需要將它們分開才最終加入令牌?你可以找到所需的模式位置,然後從那裏找到子串。例如,找到「,c」的索引。 –

+1

另外,只是你知道,字符串在Java中是不可變的,所以你不能從技術上「刪除」字符串的開始。你將最終得到一個包含你想要的新的String對象。 – aglassman

回答

4

這個任務並不需要任何正則表達式。

String s = "a,bn,c,st1,d,kr332,23,b4,46"; 
String find = ",c,"; 

String r = s.substring(s.indexOf(find)+find.length()); // st1,d,kr332,23,b4,46 

編輯:

As per comments you can use this to remove everything upto 3rd comma: 

String r = s.replaceFirst("([^,]*,){3}", "") 
+1

我認爲OP使用',c,'作爲例子,並且真的想在* 3rd *','之後得到所有的東西。這仍然應該以類似的方式可行,而且我可能錯了。 – Sam

+0

是的,@Stan所說的話是真實的。在第n個成員之後有什麼辦法獲得任何東西? –

+0

當然,可以使用簡單的正則表達式代碼完成,讓我更新。 – anubhava

1

嘗試用:

String s = "a,bn,c,st1,d,kr332,23,b4,46"; 
String search = "c"; 
List<String> list = Arrays.asList(s.split(",")); 

String output = StringUtils.join(list.subList(list.indexOf(search) + 1, list.size()), ","); 

輸出:

st1,d,kr332,23,b4,46 
+2

'StringUtils'不在JDK中... – fge

+0

這可以工作,但我想知道如果OP在真正大文件上使用它,或者需要它快速,這將會如何。 – aglassman

1

我不會推薦RegEx..but因爲這是你的問題的一部分,我想在寫作表達得到更快,我掀起這件事:

(?:\w+,){3}(.*) 

這將匹配(但不捕獲)3個1+單詞字符集([a-zA-Z0-9_]),後跟一個逗號。然後我們將匹配並捕獲字符串中的所有其他內容。

在這裏看到的例子:Regex101


此外,你可以匹配第一 3套跟一個逗號1+字字符([a-zA-Z0-9_]):

^(\w+,){3} 

然後使用Java用一個空字符串替換此匹配:Regex101

2

我們JDK 8,並假設你正在搜索令牌的位置,這應該工作:

import static java.util.Arrays.stream; 
import static java.util.stream.Collectors.joining; 
//... 

int pos = 3; 
String s = "a,bn,c,st1,d,kr332,23,b4,46"; 

String[] tokens = s.split(",") ; 
if(tokens.length > pos){ 
    String rejoined = stream(tokens, pos, tokens.length).collect(joining(",")); 
} 
相關問題