我正在填充一个带有单词和逗号的字符串,我想要删除最后一个逗号,以及我想用它替换之前的逗号。
例如:
now -> "john,mary,paul,bla,etc,"
what i want -> "john,mary,paul,bla and etc"
我想知道最好的方法,有人可以帮忙吗?
答案 0 :(得分: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());
答案 1 :(得分: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 commons这样做,但是每个人都应该在他们的工具箱中拥有apache commons,这是必不可少的。
答案 2 :(得分:0)
我就是这样做的:
str = str.replaceAll(",$", "").replaceAll(",([^,]+)$", " and $1");
第一个replaceAll
只是用空字符串替换最后一个字符(如果它是逗号)。 (正则表达式中的$
表示"匹配输入字符串的结尾")。现在最后一个逗号消失了,第二个replaceAll
将在字符串末尾查找一组非逗号字符后面的最后一个逗号;它将非commma字符视为一个组。然后整个字符串被" and "
替换,后跟替换表达式中的非逗号字符组($1
)。
一个略有不同的正则表达式:
str = str.replaceAll(",$", "").replaceAll(",(?=[^,]+$)", " and ");
在这种情况下,第二个正则表达式具有前瞻性。所以它会查找一个逗号,后跟一系列非逗号字符,后跟字符串的结尾;但是,前瞻部分中的文本不被认为是匹配字符串的一部分,因此不会被替换。因此,只需将","
替换为" and "
即可。