Java 字符串拆分特殊正则表达式

Java 字符串拆分特殊正则表达式,java,regex,string,split,Java,Regex,String,Split,我试图标记一个字符串输入,但我不知道怎么做。 其思想是,将字符串拆分为字母单词和非字母符号的实例。 例如,字符串“Test,(abc)”将被拆分为[“Test”、“,”、(“,“abc”、”)]。 现在我使用这个正则表达式: (?试试这个: String s = "I want to walk my dog, and why not?"; Pattern pattern = Pattern.compile("(\\w+|\\W)"); Matcher matcher = pattern.matc

我试图标记一个字符串输入,但我不知道怎么做。 其思想是,将字符串拆分为字母单词和非字母符号的实例。 例如,字符串
“Test,(abc)”
将被拆分为
[“Test”、“,”、(“,“abc”、”)]。

现在我使用这个正则表达式: (?试试这个:

String s = "I want to walk my dog, and why not?";
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}
产出:

I
want
to
walk
my
dog
,
and
why
not
?
\w可用于匹配单词字符([A-Za-z0-9_307;]),以便从结果中删除标点符号

(摘自:)

试试这个:

String s = "I want to walk my dog, and why not?";
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}
产出:

I
want
to
walk
my
dog
,
and
why
not
?
\w可用于匹配单词字符([A-Za-z0-9_307;]),以便从结果中删除标点符号

(摘自:)

试试这个:

public static ArrayList<String> res(String a) {
        String[] tokens = a.split("\\s+");
        ArrayList<String> strs = new ArrayList<>();
        for (String token : tokens) {
            String[] alpha = token.split("\\W+");
            String[] nonAlpha = token.split("\\w+");
            for (String str : alpha) {
                if (!str.isEmpty()) strs.add(str);
            }
            for (String str : nonAlpha) {
                if (!str.isEmpty()) strs.add(str);
            }
        }
        return strs;
    }
publicstaticarraylistres(字符串a){
字符串[]标记=a.split(\\s+);
ArrayList strs=新的ArrayList();
for(字符串标记:标记){
字符串[]alpha=token.split(\\W+);
字符串[]nonAlpha=token.split(\\w+);
用于(字符串str:alpha){
如果(!str.isEmpty())strs.add(str);
}
用于(字符串str:nonAlpha){
如果(!str.isEmpty())strs.add(str);
}
}
返回STR;
}
试试这个:

public static ArrayList<String> res(String a) {
        String[] tokens = a.split("\\s+");
        ArrayList<String> strs = new ArrayList<>();
        for (String token : tokens) {
            String[] alpha = token.split("\\W+");
            String[] nonAlpha = token.split("\\w+");
            for (String str : alpha) {
                if (!str.isEmpty()) strs.add(str);
            }
            for (String str : nonAlpha) {
                if (!str.isEmpty()) strs.add(str);
            }
        }
        return strs;
    }
publicstaticarraylistres(字符串a){
字符串[]标记=a.split(\\s+);
ArrayList strs=新的ArrayList();
for(字符串标记:标记){
字符串[]alpha=token.split(\\W+);
字符串[]nonAlpha=token.split(\\w+);
用于(字符串str:alpha){
如果(!str.isEmpty())strs.add(str);
}
用于(字符串str:nonAlpha){
如果(!str.isEmpty())strs.add(str);
}
}
返回STR;
}

我看到您希望对字母表(如Test和abc)进行分组,但不希望对非字母字符进行分组。我还看到您不希望显示空格字符。为此,在删除字符串中要匹配的所有空格后,我将使用
“(\\w+\\w)”

示例代码

String str = "Test, ( abc)";
str = str.replaceAll(" ",""); // in case you do not want space as separate char.
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}
输出

测试
,
(
abc
)

我希望这能回答您的问题。

我看到您希望对字母表(如Test和abc)进行分组,但不希望对非字母字符进行分组。我还看到您不希望显示空格字符。为此,在删除字符串中的所有空格以进行匹配后,我将使用
“(\\w+\\w)”

示例代码

String str = "Test, ( abc)";
str = str.replaceAll(" ",""); // in case you do not want space as separate char.
Pattern pattern = Pattern.compile("(\\w+|\\W)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}
输出

测试
,
(
abc
)

我希望这能回答你的问题。

我想这是最简单的形式,使用

"(?<=[a-zA-Z])(?=[^\\sa-zA-Z])|(?<=[^\\sa-zA-Z])(?=[a-zA-Z])|\\s+"

(?我猜是最简单的形式,使用

"(?<=[a-zA-Z])(?=[^\\sa-zA-Z])|(?<=[^\\sa-zA-Z])(?=[a-zA-Z])|\\s+"

”(?w*表示字母数字字符组sw*表示字母数字字符组她在我发布后修改了代码。早些时候,代码不适合非字母字符(他的正则表达式仅\\w+,这不是正确答案。问题不是代码本身,而是使用的正则表达式。代码用于说明正则表达式。)。我希望这能澄清@GCP。他在我发布后修改了代码。早些时候,代码不适合非字母字符(他的正则表达式仅\\w+,这不是正确答案。问题不是代码本身,而是使用的正则表达式。代码用于说明正则表达式。)。我希望这能澄清@GCP。