【问题标题】:Checking if a string begins with integer after line breaks [duplicate]检查换行后字符串是否以整数开头[重复]
【发布时间】:2015-05-17 14:57:23
【问题描述】:

我正在使用 Apache POI 从 .doc 文件中读取,因此,我有一个字符串数组列表,其中包含来自原始文档格式的大量换行符和制表符

我需要检查一个字符串是否包含一个整数,因为它是第一个字符。但是字符串通常如下所示:

现在位置 [3] 的第一个字符串很好,即使它稍后包含一个整数,但是位置 [4] 的字符串以 \n\r\n5.2 开头 因此以整数开头,是不可接受的,应该忽略。 但是,我似乎找不到检查这些字符串中的一个是否以整数开头的方法。我尝试使用 java 的

替换字符串中的所有 \n 和 \r
theString.replaceAll("\\\\n","");
theString.replaceAll("\\\\r","");

然而这似乎失败了,我尝试使用正则表达式来确定字符串本身是否以整数开头无济于事,因为制表符和换行符的数量各不相同。

有没有人知道为什么我可以确定字符串(在所有换行符和制表符之后)是否以整数开头?

第二个例子:

使用代码:

tempLineBreakRemoval = listoflines.get(x);
    tempLineBreakRemoval = tempLineBreakRemoval.replaceAll("\\\n", "");
   //Selection Statement to only add to "tempCommentString" if does not start with integer
    tempCommentString += listoflines.get(x);
    x++;

【问题讨论】:

  • Yet this seemed to fail。你的意思是replaceAll 方法没有做它应该做的事情吗?这可能是因为您需要将replaceAll 的返回值重新分配给theString,因为Java 中的String 是不可变的。另外,你到底为什么要使用\\\\n\\\\r
  • 另外,"\\\\n" 匹配文字反斜杠,后跟字母 n - 如果这些是实际的换行符,则应将 "[\r\n]+" 替换为 ""
  • trim 还删除了前导和尾随空格,例如theString = theString.trim();
  • @ChetanKinger replaceAll 没有去掉 \n 或 \r 字符,\\\ 是用来解析特殊字符的,\不是java字符串中的转义字符吗?
  • 是的,但你只需要 \\ 来制作一个 \ 并且 n 是一个简单的字母。

标签: java regex string line-breaks


【解决方案1】:

在解析特殊字符后,\\\\n\\n。因此,如果您希望它是\n,则必须使用\\n,这将是字符\ 和字母n。这对于replaceAll 是正确的。对于需要一个字符的替换,您甚至必须直接使用'\n'\r\t也一样。

但是,我希望为此使用单个正则表达式。这个电话应该这样做:theString.matches("\\s*\\d.*");\s 代表任何空白字符 \d 代表任何数字,. 代表任何其他尾随字符。

【讨论】:

  • 如果空格字符后出现任何数字,这将返回 true,这是否包括空格本身?
  • 是的。如果你不想要这个,你将不得不使用像这样的正则表达式 "[\\n\\r\\t]*\\d.*"
  • 正则表达式用于theString.matches 方法而不是replace all 方法;) 调用tempLineBreakRemoval.matches("[\\n\\r\\t]*\\d.*"); 如果返回true,则以数字开头,否则不返回。
猜你喜欢
  • 2023-01-01
  • 2013-09-04
  • 2012-02-06
  • 2015-03-31
  • 2011-05-04
  • 2016-02-18
  • 1970-01-01
  • 2012-03-22
相关资源
最近更新 更多