UVa#494 - 正则表达式[^ a-zA-z] +使用Java分割单词

use*_*919 2 java regex logic

我正在玩UVa#494,我设法用以下代码解决它:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {    
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = in.readLine()) != null){
            String words[] = line.split("[^a-zA-z]+");
            int cnt = words.length;
            // for some reason it is counting two words for 234234ddfdfd and words[0] is empty
            if(cnt != 0 && words[0].isEmpty()) cnt--; // ugly fix, if has words and the first is empty, reduce one word
            System.out.println(cnt);
        }
        System.exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我构建了正则表达式"[^a-zA-z]+"来分割单词,例如字符串abc..abc或者abc432abc应该分割为["abc", "abc"].但是,当我尝试字符串时432abc,我得到的结果是["", "abc"]- 第一个元素来自words[]一个空字符串,但我期待它只是["abc"].我无法弄清楚为什么这个正则表达式给了我""这个案例的第一个元素.

Syl*_*rag 8

检查拆分参考页面:拆分参考

分隔符的每个元素定义一个单独的分隔符.如果两个分隔符相邻,或者在此实例的开头或结尾处找到分隔符,则相应的数组元素包含Empty.下表提供了示例.

由于您有多个连续的分隔符,因此您将获得空数组元素