我在java中有一个字符串:
String text = "A, B, C, D, ";
我如何才能获得"A, B, C and D"
?
我也有“A,B,C,D”:text.substring(0,text.lastIndexOf(“,”)),但我如何得到我想要的结果呢?
感谢!!!
答案 0 :(得分:1)
像
这样的东西text = text.replaceAll(", (\\w+), $", " and $1");
replaceAll
使用regex作为第一个参数,可以通过$x
替换此正则表达式匹配的部分,其中x
表示与group数字匹配的部分x
(简而言之,群组是括号中的部分或正则表达式)。
因此,此正则表达式将匹配, oneOrMoreCharacters,
,它位于字符串结尾之前,正则表达式可以用$
表示。
样本:
System.out.println("A, B, C, D, ".replaceAll(", (\\w+), $", " and $1"));
输出:A, B, C and D
修改
如果您的D
部分也可以包含非字母数字字符,则代替\\w
使用代表除[^,]
之外的所有字符的,
。所以试试
text = text.replaceAll(", ([^,]+), $", " and $1");
答案 1 :(得分:0)
"A, B, C, D, ".replace(", D, ", " and D");
答案 2 :(得分:0)
您可以执行以下操作:
您可以使用StringBuilder执行此操作:
String myStr = "A, B, C, D,";
StringBuilder builder = new StringBuilder(myStr);
builder.replace(builder.lastIndexOf(","), builder.lastIndexOf(",")+1, "");
builder.replace(builder.lastIndexOf(","), builder.lastIndexOf(",")+1, " and ");
String result = builder.toString();
System.out.println(result);//Should print A, B, C and D
我还没有测试过这段代码。但是你明白了。
答案 3 :(得分:0)
String text = "A, B, C, D, ";
String[] split=text.split(",");
String ans="";
for(int i=0;i<split.length;i++){
if(i==split.length-2){
ans+= "and "+ split[i].replace(" ","");
break;
}
if(i>0){
ans+=", ";
}
ans+=split[i];
}
System.out.println(ans); // what you wanted
答案 4 :(得分:0)
好像你正在使用像
这样的代码List<String> list = Arrays.asList("A", "B", "C", "D");
String text = "";
for (String token : list) {
text += token + ", ";
}
System.out.println(text);
生成text
值。
相反,写下第一个值。然后写下除最后一个值之外的所然后使用前缀and
写下最后一个值。
List<String> list = Arrays.asList("A", "B", "C", "D");
String text = "";
if (!list.isEmpty()) {
text += list.get(0);
for (int i = 1; i < list.size() - 1; i++) {
text += ", " + list.get(i);
}
if (list.size() > 1)
text += " and " + list.get(list.size() - 1);
}
System.out.println(text);
显然,如果合适,请使用StringBuilder
。以上打印
A, B, C and D
这样做的好处在于它适用于任意数量的值,对剩余的长度和标记进行尽可能少的检查。使用单个元素,它将仅打印该值
A
有两个元素(A和B),它会打印
A and B
等等。
答案 5 :(得分:0)
您可以尝试以下内容:
String text = "A, B, C, D, ";
String[] a=text.split(",");
int i=a.length-1;
while(i>=0 && (a[i]==null || a[i].trim().isEmpty()))
i--;
System.out.println(a[i]);