【问题标题】:How to get rid of these substrings from a string in java?如何从java中的字符串中删除这些子字符串?
【发布时间】:2012-02-24 12:01:33
【问题描述】:

我有一个“a_x,b_y,c_z”形式的 java 字符串。

我想在_ 之前和, . 之后删除块

所以我需要得到 x,y,z。

我怎样才能做到这一点?
我正在尝试使String.replaceAll(",*_",",") 工作但出现错误:

线程“main”java.util.regex.PatternSyntaxException 中的异常:在索引 0 附近悬空元字符 '*'

请帮忙。

【问题讨论】:

  • 了解正则表达式的工作原理。 ,*_ 不是有效的正则表达式。参见java.util.regex.Pattern的API文档。
  • String.replaceAll("._","");怎么样

标签: java regex string pattern-matching


【解决方案1】:

这对我有用:

String b = a.replaceAll("[\\w]_", "");

这取决于你需要替换什么,我只考虑类 \w 中的字符,但你可以调整这部分以匹配你喜欢的任何内容。

【讨论】:

  • 是的,这很容易。我认为这是@p2pnode 需要的。
  • ab_xx,bc_yy 正在分发 axx,byy 。在_之前失去角色
  • 就像我说的...调整它。我的表达式匹配下划线之前属于 \w 类的任何一个字符。如果您需要一个或多个,则将该规则重写为“[\\w]+_”,如果您需要 0 个或多个,请使用 * 代替 +。
  • 确实,如果重要的是,_ 作为分隔符,您可以使用"[^_,]*_",因为它告诉用“”替换下划线之前所有不是下划线或逗号的内容。
【解决方案2】:

* 表示 0 次或多次出现,它本身并不意味着什么,这是一个错误。您必须指定您想要的 0 次或多次出现:

"a_x,b_y,c_z".replaceAll(",.*_", ",")

给予:

a_x,y,z

或更好:

"a_x,b_y,c_z".replaceAll(",[^_]*_", ",")

其中[^_] 表示任何不是_ 的字符。

【讨论】:

  • "a_x,b_y,c_z".replaceAll(",[^_]*_", ",") 有效且整洁。但是如何去掉第一个 _ 呢?
  • "a_x,b_y,c_z".replaceAll(",[^_]*", ",").replaceAll("^[^]*_", "")
【解决方案3】:
String input = "a_x,b_y,c_z";
for (String split : input.split(","))
{
  String output = split.split("_")[1];
  System.out.println(output);
}

变量output 会随着循环的每次迭代而变化(从xyz)。

【讨论】:

  • 这里的输出将是 "x\ny\nz" (其中 \n 是一个新行)。变量output 会随着循环的每次迭代而改变(从“x”到“y”再到“z”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 2015-02-19
  • 2013-08-20
  • 2019-09-08
  • 1970-01-01
相关资源
最近更新 更多