Java 获取特定字符

Java 获取特定字符,java,regex,spring,string,replaceall,Java,Regex,Spring,String,Replaceall,我想从字符串中删除零,下面是一个示例: 字符串a:02000218-0PSS-0010 a.replaceall("-(?:.(?!-))+$", "**REPLACEMENT**") 实际值:02000218-0PSS-0010 预期:02000218-0PSS-10 我使用这个正则表达式捕获-0010:-(?:(?!-)+$ 我只是不知道在“替换”部分要做什么才能真正删除未使用的零(不是最后的零,例如“10”而不是“1”) 谢谢你的阅读 您可以使用以

我想从字符串中删除零,下面是一个示例:

字符串a:
02000218-0PSS-0010

a.replaceall("-(?:.(?!-))+$", "**REPLACEMENT**")
实际值:
02000218-0PSS-0010
预期:
02000218-0PSS-10

我使用这个正则表达式捕获-0010:
-(?:(?!-)+$

我只是不知道在“替换”部分要做什么才能真正删除未使用的零(不是最后的零,例如“10”而不是“1”)


谢谢你的阅读

您可以使用以下内容:

(?<=-)0+(?=[1-9]\d*$)

(?您可以尝试以下方法:

String result = a.replaceAll("-0+(?=[1-9][0-9]*$)", "-");
对于输入字符串:
String a=“02000218-0PSS-00000010”
输出为:
02000218-0PSS-10

模式
-(?:(?!-)+$
匹配一个
-
,并且在字符串结束之前,任何直接指向右侧的字符的1+倍都不是
-

这不考虑任何数字,如果成功,将给出完全匹配,而不仅仅是零

除了lookarounds,您还可以使用捕获组,并在替换中使用
-
前缀

-0+([1-9]\d*)$
解释

  • -0+
    匹配
    -
    和1次或多次零
  • Capturegroup 1
    • [1-9]\d*
      匹配数字1-9,后跟可选数字
  • 关闭第1组
  • $
    断言字符串结尾
|

因为只有一个零件需要更换,所以您可以使用

输出

020200218-0PSS-10

谢谢你的回复,你的正则表达式的问题是它删除了所有的零。例如,如果我有这个“010”,我希望结果是这个“10”,而不是这个“1”@SWah您应该将这些信息添加到您的问题中,并展示可能遇到的多种格式。@SWah对于
000
101
应该发生什么?我确实更正了我的帖子,谢谢!对于000,我永远不会发生最后一个数字必须大于0。对于101,也没有未使用的0。@SWah请参阅我的更新:
a。replaceall(“-0+(?=[a-9])”,“-”
它实际上也很有效谢谢你,我确实喜欢MonkeyZeus one,因为我认为这样做其实更简单!但是谢谢你花时间找到并回复我的答案:)
-0+([1-9]\d*)$
String a = "020200218-0PSS-0010";
String result = a.replaceFirst("-0+([1-9]\\d*)$", "-$1");
System.out.println(result);
020200218-0PSS-10