我用單詞和逗號填充了一個字符串,並且我想擺脫最後一個逗號和之前要替換的逗號和。使用JAVA組織/操作字符串
例如:
now -> "john,mary,paul,bla,etc,"
what i want -> "john,mary,paul,bla and etc"
我想知道大一,誰能幫助的最佳方式?
我用單詞和逗號填充了一個字符串,並且我想擺脫最後一個逗號和之前要替換的逗號和。使用JAVA組織/操作字符串
例如:
now -> "john,mary,paul,bla,etc,"
what i want -> "john,mary,paul,bla and etc"
我想知道大一,誰能幫助的最佳方式?
這是解決方案之一:
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());
如果你使用「strBuilder.lastIndexOf(',')來找到合適的切點而不是搜索」etc「,這將更普遍適用。 – Jamie 2014-09-30 15:39:10
是的,我認爲你的小費Jamie可以工作 – 2014-09-30 16:31:36
是的,你'right right,jamie – 2014-10-01 08:47:39
這裏有一個整潔而這樣做的更廣義的方式:
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,這是至關重要的。
這是我會怎麼做它:
str = str.replaceAll(",$", "").replaceAll(",([^,]+)$", " and $1");
第一replaceAll
剛剛替換最後一個字符用一個空字符串,如果它是一個逗號。 (正則表達式中的$
表示「匹配輸入字符串的結尾」)。現在,最後一個逗號消失了,第二個replaceAll
將在字符串的末尾查找最後剩餘的逗號,後跟一組非逗號字符;它將非聯合字符視爲一個組。然後將整個字符串替換爲" and "
,後面接着一組非逗號字符(替換表達式中的$1
)。
略微不同的正則表達式:
str = str.replaceAll(",$", "").replaceAll(",(?=[^,]+$)", " and ");
在這種情況下,第二正則表達式具有超前。所以它會查找一個逗號,然後是一串非逗號字符,後跟字符串的結尾;但是,超前部分中的文本不被視爲匹配字符串的一部分,因此它不會被替換。因此,只需將","
替換爲" and "
即可。
你現在有什麼代碼? – unholysampler 2014-09-30 14:45:47
使用['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