使用java读取固定宽度Unicode CSV文件

时间:2016-05-01 11:50:07

标签: java csv unicode

我遇到需要读取固定宽度字节的CSV文件的情况。

以下是我的示例csv格式

 ABCD  EF日本      3456    0
 ABCD  EF感じ日本 9345    1

我需要

AB,CD,,EF,日本,3456,,0
AB,CD,,EF,感じ日本,9345,,1

问题是因为日文字符是多字节的,每个字符需要2个字节,因此固定宽度逻辑不适用。

有些人可以指导如何使用java实现这一点,或者我可以使用任何标准的CSV库。

任何提及的脚本或库都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

以固定宽度分割字符串的示例程序(您可以添加文件读取和逗号):

public class SplitStringIntoFixedSizeChunks {

    public static String[] Split(String text, int chunkSize, int maxLength) { 
        char[] data = text.toCharArray();       
        int len = Math.min(data.length,maxLength);
        String[] result = new String[(len+chunkSize-1)/chunkSize];
        int linha = 0;
        for (int i=0; i < len; i+=chunkSize) {
            result[linha] = new String(data, i, Math.min(chunkSize,len-i));
            linha++;
        }
        return result;
    }

    public static void main(String[] args) { 
        String x = "ABCD EF日本 3456 0 ABCD EF感じ日本 9345 1";
        //To Print length //System.out.println("x length: "+x.length());
        String[] lines = Split(x, 2, x.length());
        for (int i=0; i < lines.length; i++) {
            System.out.print(lines[i]);
            System.out.print( ",");
        }
    }
}

输出:

AB,CD, E,F日,本 ,34,56, 0, A,BC,D ,EF,感じ,日本, 9,34,5 ,1,

注意:如果您"error: unmappable character for encoding ASCII"运行export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8