Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 外置子字符串形成字符串_Java_Parsing - Fatal编程技术网

Java 外置子字符串形成字符串

Java 外置子字符串形成字符串,java,parsing,Java,Parsing,假设我有一个字符串:“X1+X2=Y3+Y4*Y5”,从这个字符串我想得到一个数组{X1,X2,Y3,Y4,Y5} 我的问题是如何管理以下情况:“X11+X2=Y3+Y4*Y5”,在这种情况下,我将得到一个数组:{X1,X11,X2,Y3,Y4,Y5},这是错误的,因为“X1”不存在 我还没有开发任何算法,我的想法是用X1..XN和Y1..YN的值声明两个数组,并检查每个值是否包含在我的字符串中,但这样我会遇到上面解释的问题 我想知道如何做,我不希望使用任何外部库来做这件事。您可以使用此正则表达

假设我有一个字符串:
“X1+X2=Y3+Y4*Y5”
,从这个字符串我想得到一个数组
{X1,X2,Y3,Y4,Y5}
我的问题是如何管理以下情况:
“X11+X2=Y3+Y4*Y5”
,在这种情况下,我将得到一个数组:
{X1,X11,X2,Y3,Y4,Y5}
,这是错误的,因为
“X1”
不存在

我还没有开发任何算法,我的想法是用
X1..XN
Y1..YN
的值声明两个数组,并检查每个值是否包含在我的字符串中,但这样我会遇到上面解释的问题


我想知道如何做,我不希望使用任何外部库来做这件事。

您可以使用此正则表达式的split
\\p{Alnum}+
将其拆分为任何一个或多个非字母数字,您的解决方案可以是:

String text = "X11 + X2 = Y3 + Y4 * Y5";
String[] split = text.split("\\P{Alnum}+");//This equivalent to "[^a-zA-Z\\d]+"
输出

[X11, X2, Y3, Y4, Y5]

您可以将split与这个正则表达式
\\p{Alnum}+
一起使用,该正则表达式以一个或多个非字母数字形式拆分,您的解决方案可以是:

String text = "X11 + X2 = Y3 + Y4 * Y5";
String[] split = text.split("\\P{Alnum}+");//This equivalent to "[^a-zA-Z\\d]+"
输出

[X11, X2, Y3, Y4, Y5]
我自己的解决办法是:

String patternString = "[X|Y]{1}\\d+";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);

        while(matcher.find()) {
            System.out.println(text.substring(matcher.start(), matcher.end()));
        }
[X | Y]{1}\\d+表示在任意数字后面只出现一次的X或Y字母

我自己的解决方案是:

String patternString = "[X|Y]{1}\\d+";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);

        while(matcher.find()) {
            System.out.println(text.substring(matcher.start(), matcher.end()));
        }

[X | Y]{1}\\d+表示在任意数字后面只出现一次的X或Y字母

您可以使用带多个分隔符的拆分。你的问题应该包括所有相关的细节。你说在你的例子中,你得到了错误的结果,但你没有解释你是如何得到它们的。你可以使用多个分隔符分割。你的问题应该包括所有相关的细节。你说在你的例子中你得到了错误的结果,但是你没有解释你是如何得到它们的。也许空格是可选的。在这种情况下,我更喜欢正则表达式“\\W+”谢谢@RobertKock correct
“\W+”
也可以解决问题谢谢大家的努力和时间,我找到了我的解决方案,我想与大家分享,下面的回答可能是空格是可选的。在这种情况下,我更喜欢正则表达式“\\W+”谢谢@RobertKock correct
“\W+”
也能解决问题谢谢你们的努力和时间,我找到了我的解决方案,我想和你们分享,下面回答你的意思是
”(X | Y)\\d+“
你不需要指定
{1}
因为默认情况下是1您的意思是
“(X | Y)\\d+”
您不需要指定
{1}
,因为默认情况下是1