在Java中从逗号分隔的字符串中删除最后一组值

3
我想要使用Java从字符串中移除最后一组数据。例如,我有一个字符串A,B,C,,我想要移除,C,并获取输出值A,B。在Java中如何实现呢?请帮忙解决。
8个回答

4
String start = "A,B,C,";
String result = start.subString(0, start.lastIndexOf(',', start.lastIndexOf(',') - 1));

4

这里有一个相当“强大”的正则表达式解决方案:

Pattern p = Pattern.compile("((\\w,?)+),\\w+,?");

for (String test : new String[] {"A,B,C", "A,B", "A,B,C,",
                                 "ABC,DEF,GHI,JKL"}) {
    Matcher m = p.matcher(test);
    if (m.matches())
        System.out.println(m.group(1));
}

输出:

A,B
A
A,B
ABC,DEF,GHI

2

由于可能存在逗号,可以使用org.apache.commons.lang.StringUtils这样的内容:

ArrayList<String> list = new ArrayList(Arrays.asList(myString.split()));
list.remove(list.length-1);
myString = StringUtils.join(list, ",");

1
完全分割和连接肯定是过度杀伤力了吧? - T.J. Crowder
这取决于他的情况。代码简单易读,不会过早优化。虽然我喜欢正则表达式的解决方案。 - Peter DeWeese

0
public string RemoveLastSepratorFromString(string input)
{
    string result = input;
    if (result.Length > 1)
    {
        result = input.Remove(input.Length - 1, 1);
    }
    
    return result;
}
        
// use from above method
string test = "1,2,3,"
string strResult = RemoveLastSepratorFromString(test);
//output --> 1,2,3

0

您可以使用String#lastIndexOf来查找倒数第二个逗号的索引,然后使用String#substring仅提取其前面的部分。由于您的示例数据以“,”结尾,因此需要使用接受起始点的String#lastIndexOf版本并跳过最后一个字符(例如,输入字符串的length减1)。

我本来不打算发布实际代码,因为更好的方法是教人钓鱼,但既然其他人都这样做了:

String data = "A,B,C,";
String shortened = data.substring(0, data.lastIndexOf(',', data.length() - 2));

在C之后,我也有一个逗号。因此,当我想要获取最后一个逗号的索引时,我将得到C之后的逗号的索引。 - Suvonkar
@Suvonkar:我刚刚注意到这一点,并在你发表评论时进行了更新;请查看更新。 - T.J. Crowder
@Peter: :-) 实际上,一开始我确实是那样读了你的评论。直到后来我才看到了尾随逗号的问题。 - T.J. Crowder

0
如果无法使用完整的String.split(),那么考虑只扫描逗号分隔的字符串,并在到达第二个逗号后停止扫描,而不将其包括在最终答案中?
String start = "A,B";
StringBuilder result = new StringBuilder();
int count = 0;
for(char ch:start.toCharArray()) {
    if(ch == ',') {
        count++;
        if(count==2) {
            break;
        }
    }
    result.append(ch);
}
System.out.println("Result = "+result.toString());

这是一个简单但很有效的技巧。

如果你要移除最后一组数据,无论你想读多少,可以使用下面这行代码:start.substring(0, start.lastIndexOf(',', start.lastIndexOf(',')-1))


0
你可以使用正则表达式来完成这个任务。
String start = "A,B,C,";
String result = start.replaceAll(",[^,]*,$", "");
System.out.println(result);

打印

A,B

这只是简单地删除“倒数第二个逗号后跟数据后面的最后一个逗号”


0
另一种方法是使用 StringTokenizer
  String input = "A,B,C,";
  StringTokenizer tokenizer = new StringTokenizer(input, ",");
  String output = new String();
  int tokenCount = tokenizer.countTokens();
  for (int i = 0; i < tokenCount - 1; i++) {
    output += tokenizer.nextToken();
    if (i < tokenCount - 1) {
      output += ",";
    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接