首页 > 解决方案 > 在 java 中使用 .split 需要一些简单的帮助

问题描述

我有一个简单的代码:

    public static void main(String[] args) {
        String s = "He is a very very good boy, isn't he?"
        String[] words = s.split("[\\s\\-\\.\\'\\?\\,\\_\\@\\!]");
        System.out.println(words.length);
        for(int i = 0; i<words.length; i++) {
            System.out.println(words[i]);
        }
        scan.close();
    }

那应该输出我这个:

10
He
is
a
very
very
good
boy
isn
t
he

但相反,它会打印出这个:

11
He
is
a
very
very
good
boy

isn
t
he

谁能建议我如何解决这个问题?我知道问题是当我的程序遇到“,”时它会自动拆分字符串,然后再跟着“”它再次拆分它,所以它在我的输出中创建一个空行,但我不知道如何修复它所以它将同时拆分多个分隔符。

标签: javaregexstring

解决方案


?首先,虽然像和一般的正则表达式中具有特殊含义的字符.必须被转义,但它们在字符类中时不需要转义,[].

所以你的split电话相当于:

String[] words = s.split("[\\s\\-.'?,_@!]");

-需要转义,因为它在字符类中意味着“to”。

本质上,您希望将其", "视为一个分隔符。要匹配一个或多个字符,您应该使用+量词:

String[] words = s.split("[\\s\\-.'?,_@!]+");

在这里,您是说分隔符至少是字符类中的这些字符之一。

这里有一些可视化来查看匹配的字符,比较:


推荐阅读