【问题标题】:regex for tab doesnt work | java标签的正则表达式不起作用 |爪哇
【发布时间】:2017-10-05 18:41:03
【问题描述】:

当标签被发现时,我正在尝试使用正则表达式来拆分字符串。

我用过这个:

String line = scan.nextLine(); String Splitted[] = line.split("\t");

但它不起作用,所以目前我正在使用(这对我有用):

String line = scan.nextLine(); String Splitted[] = line.split("\\s\\s\\s\\s");

你们知道为什么我不能使用“\t”正则表达式吗?

【问题讨论】:

  • 你应该使用 \\t 而不是 \t 另外你可以使用 \\t+
  • 那么你的字符串中没有制表符。不需要使用"\\t""\t" 是匹配单个文字选项卡的有效正则表达式模式。 "\\s\\s\\s\\s" 很可能是因为输入行中有 4 个连续的空格。
  • "abc\tdef".split("\t") 工作得非常好 - 你的字符串中可能没有标签(\t
  • 你可以用\t代替\\s+
  • 您的正则表达式应该可以工作,所以问题可能出在您的输入上。在此循环中,标签应打印为9。他们是吗? for (int i = 0; i < line.length(); i++) { System.out.println((int) line.charAt(i)); }

标签: java regex string split


【解决方案1】:

是的,\t 是有效的正则表达式,但在 Java 字符串文字中,反斜杠具有特殊含义,因此要获得正则表达式符号 \t,您必须使用 \\t。但是由于您正在处理用户输入,您永远不知道这个“制表符”真正由什么组成(可能是制表符符号或 4 个空格)。所以也许你应该在(\\t|\\s{2,}) 处拆分——注意,这是一个Java 字符串文字。因此是双反斜杠。

编辑:在我上面的答案中,我怀疑您也不想在单个空格处拆分,对吗?如果您确实想在单个空格处拆分,您实际上可以直接使用 \\s+

【讨论】:

  • 编辑:我怀疑你也不想在单个空格处拆分,对吗?如果你这样做了,你真的可以只使用 \\s+ 代替。所以你认为 \\s+ 不会检测到单个空格?
  • @RizwanM.Tuman 你弄错了。我添加了粗体字体以明确我的意思。无论如何,谢谢你的提示——我的话有点误导。
  • 我的回答解释了这种情况下可能存在的问题并给出了可行的解决方案。为什么它被否决? @D.Drozd 如果这解决了您的问题并且可以为遇到相同问题的其他用户提供帮助,如果您将此答案标记为已接受,我会很高兴。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2011-05-16
  • 2014-03-15
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多