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

在java中从逗号分隔的字符串中删除最后一组值,java,Java,我希望使用java从字符串中删除最后一组数据。 例如,我有一个字符串,如a,B,C,,我想删除,C,,并想得到输出值,如a,B。在java中它是如何实现的?请提供帮助。您可以使用字符串#lastIndexOf查找倒数第二个逗号的索引,然后仅提取其前面的部分。由于示例数据以“,”结尾,因此需要使用并使其跳过最后一个字符(例如,输入字符串的长度减1) 我本不打算发布理论上的实际代码来更好地教一个人钓鱼,但正如其他人一样: String data = "A,B,C,"; String shortene

我希望使用java从字符串中删除最后一组数据。 例如,我有一个字符串,如
a,B,C,
,我想删除
,C,
,并想得到输出值,如
a,B
。在java中它是如何实现的?请提供帮助。

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

我本不打算发布理论上的实际代码来更好地教一个人钓鱼,但正如其他人一样:

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

由于后面可能有逗号,类似于以下内容(使用org.apache.commons.lang.StringUtils):

ArrayList list=新的ArrayList(Arrays.asList(myString.split());
列表。删除(列表长度-1);
myString=StringUtils.join(列表,“,”);
这是一个相当“健壮”的reg exp解决方案:

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
如果无法使用full String.split(),则只需扫描字符串中的逗号,并在到达第2位后停止,而不将其包含在最终答案中如何

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

您可以使用正则表达式执行此操作

String start = "A,B,C,";
String result = start.replaceAll(",[^,]*,$", "");
System.out.println(result);
印刷品

A,B

这只是删除“最后一个逗号后面跟数据,后面跟最后一个逗号”的字符。

另一种方法是使用
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 += ",";
    }
  }
String input=“A,B,C,”;
StringTokenizer tokenizer=新的StringTokenizer(输入“,”);
字符串输出=新字符串();
int tokenCount=tokenizer.countTokens();
对于(int i=0;i
在结尾(C之后)我还有一个逗号。因此,当我想得到逗号的最后一个索引时,我会得到最后一个逗号的索引,即C之后的逗号。@Suvonkar:我刚刚注意到了这一点,并在你评论时进行了更新;看到更新了吗。@Peter::-)事实上,我一开始真的是这么看你的评论的。直到后来我才看到后面的逗号。当然,完全拆分和联接是一种严重的过度操作吗?这取决于他的情况。代码简单易读,不会过早优化。不过,我喜欢正则表达式的解决方案。
A,B
  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 += ",";
    }
  }
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