java – 为什么String.split(“£”,2)不起作用?

我有一个1000行的文本文件,格式如下:

19 x 75 Bullnose Architrave/Skirting £1.02 

我正在编写一个逐行读取文件的方法 – 这个工作正常.

然后我想用“£”分隔每个字符串作为分隔符&把它写出来
一个ArrayList< String>采用以下格式:

19 x 75 Bullnose Architrave/Skirting, Metre, 1.02

这就是我接近它的方式(productList是ArrayList,在try块之外声明/实例化):

try{
    br = new BufferedReader(new FileReader(aFile));
    String inputLine = br.readLine();
    String delim = "£";

    while (inputLine != null){
        String[]halved = inputLine.split(delim, 2);
        String lineOut = halved[0] + ", Metre, " + halved[1];//Array out of bounds
        productList.add(lineOut);

        inputLine = br.readLine();
    }
}

String没有拆分,我不断收到ArrayIndexOutOfBoundsException.我对正则表达式不太熟悉.我也尝试过使用旧的StringTokenizer,但得到了相同的结果.

£作为一个delim还是有问题还是别的?我确实想知道它是否与第二个令牌没有被读作字符串有关?

任何想法都会有所帮助.

最佳答案
以下是一些可能的原因:

>文件的编码与您用来读取它的编码不匹配,文件中的“磅”字符被“损坏”为其他内容.
>文件和源代码使用不同的磅字符.例如,Unicode有两个看起来像“英镑符号”的代码点 – 英镑字符(00A3)和里拉字符(2084)……然后是罗马semuncia字符(10192).
>您正在尝试编译UTF-8编码的源文件,而不告诉编译器它是UTF-8编码的.

从您的评论来看,这是一个编码不匹配的问题;即,Java使用的“默认”编码与文件的实际编码不匹配.有两种方法可以解决这个问题:

>更改文件的编码以匹配Java的默认编码.你似乎已经尝试过但失败了. (这不会是我这样做的方式……)
>更改程序以使用特定(非默认)编码打开文件;例如更改

new FileReader(aFile)

new FileReader(aFile, encoding)

其中encoding是文件实际字符编码的名称. Java理解的编码名称列于here,但我的猜测是它是“ISO-8859-1”(又名Latin-1).

转载注明原文:java – 为什么String.split(“£”,2)不起作用? - 代码日志