2017-02-17 31 views
1

我對java很陌生。我想將字符串拆分爲以下方式。 假設我有給定的樣1 jayesh =10 vyas =13 harshit=10; and so on一個字符串輸入作爲輸入 樣品2:harsh=2, vyas=5;以不同的方式在java中分割字符串

現在我想jayesh, vyas, harshit from sample 1 and harsh , vyas from sample 2(all this type of strings which are just before the assignment operator)存儲到字符串或字符數組。

所以任何人都可以請告訴我有關如何在java中做到這一點。我知道java中的split方法,但在這種情況下,我必須存儲多個字符串。

+0

你仍然可以使用分裂(),但你必須再拆每個結果。 –

+0

'String.split(正則表達式)'你有什麼問題?個體元素是如何構成的?是否總是'name = numeric_value name = numeric_value ...'或者它們是否被';'分隔,是否有非數字值等?作爲split()的替代方法,你可以直接使用'Pattern'和'Matcher'並匹配並提取'='前面的單詞。 – Thomas

回答

4

可以使用=\\d+;?正則表達式

=\\d+;?比賽=和儘可能多的數字與;可選

String s="jayesh =10 vyas =13 harshit=10;"; 
    String[] ss=s.split("=\\d+;?"); 
    System.out.println(Arrays.toString(ss)); 

輸出

[jayesh , vyas , harshit] 

爲了進一步擴展它,你可以使用\\s*=\\d+[,;]?\\s*

\\s*:匹配零個或多個空格

[,;]?匹配任何字符提及在列表中可選

,但如果你想避免數字之後的任何特殊字符然後用

\\s*=\\d+\\W*"

\\s*=:匹配零個或多個空格和=字符

\\d+:匹配一個或多個數字

\W*:匹配零個或多個非單詞字符除了a-zA-z0-9_

String s="harsh=2, vyas=5; vyas=5"; 
    String s2 ="jayesh =10 vyas=13 harshit=10;"; 
    String regex="\\s*=\\d+\\W*"; 
    String[] ss=s.split(regex); 
    String[] ss2=s2.split(regex); 
    System.out.println(Arrays.toString(ss)); 
    System.out.println(Arrays.toString(ss2)); 

輸出

[harsh, vyas, vyas] 
[jayesh, vyas, harshit] 

注:空間後爲格式化添加,雖然在ssss2數組元素中沒有空格,但由Arrays.toString函數執行。

對於​​使用

Set<String> mySet = new HashSet<String>(Arrays.asList(ss)); 
+0

爲表達式添加一些空格,他應該沒問題,除非輸入看起來不同,例如如新添加的包含逗號的樣本2。 – Thomas

+0

我可以存儲這個字符串在哈希集或設置,以避免重複?假設如果我有兩個相同的字符串名稱jayesh和另一個也是jayesh然後我想只存儲單個字符串。 –

+0

@JayeshVyas是的,你可以這樣設置 mySet = new HashSet (Arrays.asList(ss));'爲了進一步閱讀,你可以通過[oracle regex](https://docs.oracle.com/ javase/tutorial/essential/regex /)並嘗試'字符類和'預定義的字符類' –

0

你可以使用的replaceAll()來得到預期的結果

String stringToSearch = "jayesh =10 vyas =13 harshit=10;"; 

stringToSearch = stringToSearch.replaceAll("=\\d+;?",""); 

System.out.println(stringToSearch); 

output: 
jayesh vyas harshit 
+0

OP,我想將'jayesh,vyas,...所有這些類型的字符串'存儲在字符串或字符數組中'和很好的正則表達式 –