使用JAVA组织/操作字符串

使用JAVA组织/操作字符串,java,Java,我用单词和逗号填充字符串,我想去掉最后一个逗号和它前面的一个逗号,我想用and替换 例: 我想知道最好的方法,有人能帮忙吗?这是一种解决方案: StringBuilder strBuilder = new StringBuilder("john,mary,paul,bla,etc,"); int prevIndex = strBuilder.indexOf("etc"); strBuilder.replace(prevIndex-1, prevIndex, " and "); int ne

我用单词和逗号填充字符串,我想去掉最后一个逗号和它前面的一个逗号,我想用and替换

例:


我想知道最好的方法,有人能帮忙吗?

这是一种解决方案:

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());

以下是一种更简洁、更通用的方法:

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;
当然,您需要ApacheCommons来实现这一点,但每个人的工具箱中都应该有ApacheCommons,这是必不可少的

我就是这样做的:

str = str.replaceAll(",$", "").replaceAll(",([^,]+)$", " and $1");
如果最后一个字符是逗号,则第一个replaceAll将用空字符串替换最后一个字符。$在正则表达式中,表示匹配输入字符串的结尾。现在最后一个逗号已经消失,第二个replaceAll将在字符串末尾查找最后一个剩余的逗号,后跟一组非逗号字符;它将非逗号字符视为一个组。然后,在替换表达式中,整个字符串被一组非逗号字符$1替换,后面跟一组非逗号字符$1

稍微不同的正则表达式:

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

在本例中,第二个正则表达式具有前瞻性。因此,它将查找一个逗号,后跟一系列非逗号字符,后跟字符串的结尾;但是,先行部分中的文本不被视为匹配字符串的一部分,因此不会被替换。因此,只需将其替换为and即可。

您现在有什么代码?这两项任务都可以使用and和正则表达式轻松完成,即去掉最后一个逗号,并将下一个逗号替换为and。如果你不知道正则表达式的基本知识,看看这个。第二个任务最好是在最后一个逗号被删除后搜索,然后搜索一组非-字符。如果您使用strBuilder.lastIndexOf',来查找适当的切点,而不是搜索等,那么这将更普遍适用。Java 8现在不需要Apache Commons。@ajb感谢指针。所以他们终于添加了它!虽然在安装Java8之前我要等很长时间。
str = str.replaceAll(",$", "").replaceAll(",(?=[^,]+$)", " and ");