【问题标题】:Remove space and hypen at the beginning of string in java删除java中字符串开头的空格和连字符
【发布时间】:2017-01-28 07:01:49
【问题描述】:

我想从字符串中删除前导空格和连字符:

String s = " – Direktorat Jenderal Pajak";

我希望结果是这样的:

s = "Direktorat Jenderal Pajak";

【问题讨论】:

  • s = s.substring(3);
  • s.replace("–","").trim();
  • 这个字符串“VIVA.co.id –”的正则表达式是什么?
  • 正则表达式将^\s*?-\s*替换为空字符串""

标签: java regex string


【解决方案1】:

如果所有行都有正好三个字符(空格后接连字符后接空格),则 4castle 的响应为真,它是最快这样做的方法(s = s.substring(3);)。 但是,如果可以有任意数量的空格和连字符,则必须使用 s.replaceFirst("regexp", "") 的正则表达式,如下所示:

String target = s.replaceFirst("[ ]*[–]*[ ]*" , "");

使用的正则表达式说明:

[ ] (1 个空格) : 仅表示一个空格

[ ]* :表示任意数量的空格(0..任意数量)

[–]* : 表示任意数量的连字符

在一天结束时,使用的所有正则表达式意味着:替换任意数量的空格后跟任意数量的连字符后跟任意数量的空格行前导(replaceFirst)由空字符串。

【讨论】:

  • 这些括号已过时," *-* *" 也会这样做。但是replaceFirst并不能保证匹配在字符串的开头,所以需要在模式开头的锚点^
  • @Holger 我同意 ^ 强制处理,但在这个问题上下文中使用 replaceFirst 就足够了。方括号并不过时,但它是一种不同且更严格的语法。正则表达式有几种你应该知道的语法。
  • 好吧,如果你使用^,那么replaceFirst就足够了。没有它,它不是。由于删除括号会产生相同的结果,因此它们 已过时。而且它们不是“更严格的语法”。它们表示字符类,而不是实际预期的单个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2011-12-22
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多