2013-11-10 72 views
1

例如,我有前邊界'x'和後邊界'y'在特定的兩個字符之間獲取字符串的最簡單方法是什麼?

E.G. 給定一個字符串'abcxfoobaryblablah',它應該返回'foobar'。

假設兩個邊界只在字符串中出現一次,就像例子中一樣。

謝謝!不必使用正則表達式,但我想這是最好的方法。

+0

IDK的Java,但在正則表達式是'×([^ Y] +)'。你也可以做'x(。*?)y'。如果真的有一次,那麼'x(。*)y'。您可以使用substr並搜索x,y的索引,然後搜索它之間的substr。沒有正則表達式需要 – 2013-11-10 04:34:32

回答

5
String s = "abcxfoobaryblablah"; 
s = s.substring(s.indexOf('x') + 1, s.indexOf('y')); 
System.out.println(s); 

foobar 
+0

是的,但如果缺少'x'或'y',或者'y'出現在'x'之前,您將會遇到問題。在這種情況下,未經檢查的例外... –

+1

確實如此,但他可以根據自己的具體需要量身定製,我不知道他可能有什麼其他要求。 – arynaq

0

可能是一個漫長的代碼,而只是一個簡單的邏輯。

String str="abcxfoobaryblablah"; 
char array[]=str.toCharArray(); 
boolean flag=false; 
String answer=""; 

for(int i=0;i<array.length;i++) 
{ 
if(array[i]=='x'){ 
    flag=true; 
    continue; 
} 
if(array[i]=='y') break; 
if(flag)answer+=array[i]; 
} 

System.out.println(answer); 
0
String input = "abcxfoobaryblablah"; 

int startIndex = input.indexOf("x"); 

int endIndex = input.indexOf("y");  



String output = input.substring(startIndex+1, endIndex); 

System.out.println(output); 
0

你當然可以做子,但它是可能的正則表達式。

String str = "abcxfoobaryblablah"; 
str = str.replaceAll("^.*x|y.*$", ""); 

^.*xString開始的字符匹配的最多xy.*$將字符從y匹配到String的末尾。

注意,如果xy後,那麼這將x後只保留人物的String結束。如果x不存在,它將從String開始的字符保留爲y。如果你只希望它當xy都在那裏以正確的順序工作,那麼這就是你想要的東西:

String str = "abcxfoobaryblablah"; 
str = str.replaceAll("^.*x(.*)y.*$", "$1"); 

這使用groups

0

最簡單的方法是:

String middle = str.replaceAll(".*x(.*)y.*", "$1"); 
相關問題