2014-09-30 80 views
0

我用單詞和逗號填充了一個字符串,並且我想擺脫最後一個逗號和之前要替換的逗號和。使用JAVA組織/操作字符串

例如:

now -> "john,mary,paul,bla,etc," 
what i want -> "john,mary,paul,bla and etc" 

我想知道大一,誰能幫助的最佳方式?

+0

你現在有什麼代碼? – unholysampler 2014-09-30 14:45:47

+0

使用['replaceAll'](http://docs.oracle.com/javase/8)可以很容易地完成這兩項任務(擺脫最後的逗號,並用「和」替換倒數第二個逗號) /docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String-)和regexes。如果你不知道正則表達式的基礎知識,看看這個[教程](http://docs.oracle.com/javase/tutorial/essential/regex/)。第二個任務最好通過在最後一個逗號消除之後搜索',',接着是一個非'''字符的捕獲組來完成。 – ajb 2014-09-30 15:04:07

回答

0

這是解決方案之一:

StringBuilder strBuilder = new StringBuilder("john,mary,paul,bla,etc,"); 

int prevIndex = strBuilder.indexOf("etc"); 

strBuilder.replace(prevIndex-1, prevIndex, " and "); 

int nextIndex = strBuilder.indexOf("etc"); 

strBuilder.replace(nextIndex+3, nextIndex+4, "."); 

System.out.println("Result: "+strBuilder.toString()); 
+0

如果你使用「strBuilder.lastIndexOf(',')來找到合適的切點而不是搜索」etc「,這將更普遍適用。 – Jamie 2014-09-30 15:39:10

+0

是的,我認爲你的小費Jamie可以工作 – 2014-09-30 16:31:36

+0

是的,你'right right,jamie – 2014-10-01 08:47:39

0

這裏有一個整潔而這樣做的更廣義的方式:

String str = "john,mary,paul,bla,etc,"; 

String[] splitStr = str.split(","); 
String[] arrayWithAllExceptLast = java.util.Arrays.copyOfRange(splitStr, 0, splitStr.length - 1); 
String last = splitStr[splitStr.length - 1]; 
String finalString = org.apache.commons.lang3.StringUtils.join(arrayWithAllExceptLast, ",") + " and " + last; 

您需要Apache公地要做到這一點,當然,但每個人都應該有在他們的工具箱中的apache commons,這是至關重要的。

+1

Java 8 has ['join'](http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java .lang.CharSequence ...-)現在 - 不需要Apache Commons。 – ajb 2014-10-01 02:01:10

+0

@ajb感謝指針,所以他們最終添加了它!雖然在安裝Java 8之前我會等待很長一段時間。 – mwarren 2014-10-01 06:18:50

0

這是我會怎麼做它:

str = str.replaceAll(",$", "").replaceAll(",([^,]+)$", " and $1"); 

第一replaceAll剛剛替換最後一個字符用一個空字符串,如果它是一個逗號。 (正則表達式中的$表示「匹配輸入字符串的結尾」)。現在,最後一個逗號消失了,第二個replaceAll將在字符串的末尾查找最後剩餘的逗號,後跟一組非逗號字符;它將非聯合字符視爲一個組。然後將整個字符串替換爲" and ",後面接着一組非逗號字符(替換表達式中的$1)。

略微不同的正則表達式:

str = str.replaceAll(",$", "").replaceAll(",(?=[^,]+$)", " and "); 

在這種情況下,第二正則表達式具有超前。所以它會查找一個逗號,然後是一串非逗號字符,後跟字符串的結尾;但是,超前部分中的文本不被視爲匹配字符串的一部分,因此它不會被替換。因此,只需將","替換爲" and "即可。