2016-09-09 80 views
2

我想打印出圓括號內的所有單詞。例如我的字符串看起來像這樣:某些標籤之間的每個字母的調用函數

(192.168.0.112)(192.168.0.166)(192.168.0.112)(192.168.0.166)(192.168.0.106) 

我希望它在for循環,以便這會發生。我知道我必須使用某種循環,但我不知道如何。

myFunction(192.168.0.112); 
myFunction(192.168.0.166); 
myFunction(192.168.0.112); 
myFunction(192.168.0.166); 

我搜索了很多關於谷歌,約9頁,而我還沒有找到任何工作的事情。

+0

您還沒有使用正確的關鍵字。爲什麼不搜索諸如「拆分字符串」 –

+0

的東西你想在一些JSP或Java中使用這個嗎? –

回答

3

您可以使用正則表達式\(([^)]*)\)捕捉一切的括號內。

這是示例代碼

輸出

got string 192.168.0.112 for further processing. 
got string 192.168.0.166 for further processing. 
got string 192.168.0.112 for further processing. 
got string 192.168.0.166 for further processing. 
got string 192.168.0.106 for further processing. 

代碼

import java.util.regex.*; 
import java.util.*; 

public class HelloWorld { 
    public static void main(String[] args) { 
     List <String> allMatches = new ArrayList <String>(); 
     Matcher m = Pattern.compile("\\(([^)]*)\\)") 
      .matcher("(192.168.0.112)(192.168.0.166)(192.168.0.112)(192.168.0.166)(192.168.0.106)"); 

     while (m.find()) 
      allMatches.add(m.group(1)); 

     for (String match: allMatches) 
      myFunction(match); 
    } 

    public static void myFunction(String string) { 
     System.out.println("got string " + string + " for further processing."); 
     //do your processing here 
    } 
} 

EDIT 1 -存儲我ndex也可以使用Map代替List

輸出

Index: 0 - got string 192.168.0.112 for further processing. 
Index: 1 - got string 192.168.0.166 for further processing. 
Index: 2 - got string 192.168.0.112 for further processing. 
Index: 3 - got string 192.168.0.166 for further processing. 
Index: 4 - got string 192.168.0.106 for further processing. 

代碼

import java.util.regex.*; 
import java.util.*; 

public class HelloWorld { 
    public static void main(String[] args) { 
     int index=0; 
     Map<Integer, String> allMatches = new HashMap<Integer, String>(); 
     Matcher m = Pattern.compile("\\(([^)]*)\\)") 
      .matcher("(192.168.0.112)(192.168.0.166)(192.168.0.112)(192.168.0.166)(192.168.0.106)"); 

     while (m.find()) 
      allMatches.put(index++, m.group(1)); 

     for (Map.Entry<Integer, String> match: allMatches.entrySet()) 
      myFunction(match.getKey(), match.getValue()); 
    } 

    public static void myFunction(int index, String ip) { 
     System.out.println("Index: " + index + " - got string " + ip + " for further processing."); 
     //do your processing here 
    } 
} 
+0

它也許可以給它某種索引? public static void myFunction(String string,int index){}將看起來像這樣,並且每個「ip」地址都會增加。所以:我想我例如說:'IP 0; IP 1; IP 2; IP3;' – Jason

+0

@Jason如果你想存儲索引,那麼你可以使用'Map'而不是'List'。查看我更新的答案(*編輯1 *) –

4

使用Matcher類和while函數來查找並遍歷所有匹配。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
... 
Matcher m = Pattern.compile("(?<=\\().*?(?=\\))").matcher(str); 
while (m.find()) { 
    myFunction(m.group(0)); 
} 

DEMO

Matcher m = Pattern.compile("\\((.*?)\\)").matcher(str); 
while (m.find()) { 
    myFunction(m.group(1)); 
} 
0

你可以得到的字符串和分裂與\)\(簡單的正則表達式:

String s = "(192.168.0.112)(192.168.0.166)(192.168.0.112)(192.168.0.166)(192.168.0.106)"; 
String[] res = s.substring(1, s.length()-2).split("\\)\\("); 
System.out.println(Arrays.toString(res)); 

查看Java demo

相關問題