在不可见字符(制表符、回车 return、组分隔符等)上分隔字符串?

Separating String on invisible character (tab, carriage return, group separator, etc)?

我正尝试在 Android 应用程序中针对某些字符拆分字符串。字符为井号、逗号、分号、制表符、回车return、组分隔符、单位分隔符和记录分隔符。

这是我进行拆分的方式:

private ArrayList<String> splitdata(String data, String delimiter){
    ArrayList<String> fields = new ArrayList<>();
    int i = 0; int previous = 0; int index = 0;
    boolean first = true;
    while (i != -1) {
        i = data.indexOf(delimiter,i);

        if(i != -1){
            if (first) {
                fields.add(data.substring(0, i));
                first = false;
            } else {
                fields.add(data.substring(previous + delimiter.length(), i));
            }
            Log.d(SCANNED_INTENT_TAG,"Newly found field: " + fields.get(index));
            index++;
            previous = i;
            i += delimiter.length();
        }
    }
    if (previous < (data.length()-1) && !first) {
        fields.add(data.substring(previous+1));
        Log.d(SCANNED_INTENT_TAG,"Newly found field: " + fields.get(index));
    }
    return fields;
}

这适用于我可以从键盘输入的可见字符,例如井号、逗号和分号。但是,我无法让它检测特殊字符制表符、回车 return、组分隔符、单位分隔符或记录分隔符。我像这样传递它们:

some_arraylist = splitdata(some_str,"\t");
some_arraylist = splitdata(some_str,"\r");
some_arraylist = splitdata(some_str,Character.toString((char) 31));
some_arraylist = splitdata(some_str,Character.toString((char) 29));
some_arraylist = splitdata(some_str,Character.toString((char) 28));

我应该将它们作为什么传递?

我不确定你是否知道它,但字符串 class 已经有一个接受正则表达式的拆分函数,并将 return 你的拆分字符串数据作为字符串数组。查看您的代码,您似乎没有做任何与 split 所做的不同的事情。此外,split 函数处理正则表达式,这非常强大,而且实现起来非常复杂。使用已包含在 JDK.

中的可靠方法