为什么我的String数组长度是3而不是2?

时间:2019-05-16 18:20:42

标签: java regex

我试图了解正则表达式。我想使用split创建一个String []来显示给定的字符串表达式中有多少个字母?

import java.util.*; 
import java.io.*;

public class Main {

  public static String simpleSymbols(String str) {

     String result = "";
     String[] alpha = str.split("[\\+\\w\\+]");
     int alphaLength = alpha.length;
     // System.out.print(alphaLength);

     String[] charCount = str.split("[a-z]");
     int charCountLength = charCount.length;
     System.out.println(charCountLength);
   }
}

我的输入字符串是"+d+=3=+s+"。我拆分字符串以计算字符串中的字母数。数组长度应该是两个,但我要三个。另外,我正在尝试制作一个正则表达式来检查模式+ b +,其中b是字母表中的任何字母?正确吗?

2 个答案:

答案 0 :(得分:1)

所以,有几件事突然出现了:

首先,您的正则表达式看起来正确。如果您担心正则表达式的性能,可以使用https://regexr.com/进行检查。只需将您的正则表达式放在顶部,然后在底部输入您的字符串以查看其是否正确匹配

第二,经过仔细检查,我发现您正在使用split功能。虽然方便快速分割字符串,但您要注意分割的内容。在这种情况下,您将删除最初查看的所有字符串,这将导致找不到。如果将其打印出来,则会注意到以下内容(对于+ d + = 3 = + s +的输入字符串):

+
+=3=+
+

这表明您不小心切掉了要查找的内容。现在,有几种方法可以解决此问题,具体取决于您的标准。

现在,如果您想要的只是在所有+ s上分开,而只找到直接由+ s限制的东西也没关系,那么split的效果真棒。只需执行str.split("+"),这将为您返回以下列表(对于+ d + = 3 = + s +):

d
=3=
s

但是,您会看到这带来了一些问题。首先,它不会去除我们不想要的= 3 =;其次,它并没有真正为我们提供被+ _ +格式包围的值,其中下划线表示您要输入的字符串/字符寻找。

看到您正在使用+ w时,您打算查找被+ s包围的单词。但是,如果您只是想查找一个字符,我建议您使用另一个字符,例如[a-z]或[a-zA-Z]更具体。但是,如果要查找多个字母字符,则可以使用模式。您还可以在模式末尾添加*(0或更大)或+(1或更大),以指示您到底要寻找什么。

我不会直接为您提供答案,但会为您提供前进方向的线索。尝试使用模式和匹配器找到上面列出的正则表达式,然后如果找到匹配项,请确保将其存储在:)

此外,为了将来参考,至少在Java中,应始终以小写字母开头的函数名称。只有常量和类名才能以大写字母开头:)

答案 1 :(得分:0)

  

我正在尝试使用split来计算该字符串中的字母数。数组长度应该是两个,但我要三个。

分割函数中的正则表达式用作定界符,并且不会在结果中显示。在您的情况下,“ str.split([a-z])”意味着使用字母作为分隔符来分隔输入字符串,这将使三个子字符串成为“(+)| d |(+ = 3 = +)| s |(+)”。

如果您真的想使用“ split”来计算字母数,请使用'str.split(“ [^ a-z]”)'。但是我建议使用“ java.util.regex.Matcher.find()”来找出所有字母。

  

此外,我正在尝试制作一个正则表达式来检查+ b +的模式,其中b是字母表中的任何字母?正确吗?

类似地,检查“ java.util.regex.Matcher”中的功能。