【问题标题】:Separating String on invisible character (tab, carriage return, group separator, etc)?在不可见字符(制表符、回车、组分隔符等)上分隔字符串?
【发布时间】:2018-01-03 19:21:16
【问题描述】:

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

这是我进行拆分的方式:

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;
}

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

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));

我应该以什么形式传递它们?

【问题讨论】:

  • 为什么不直接使用 String.split 或者我错过了什么?

标签: java android string string-comparison


【解决方案1】:

我不确定您是否知道,但 String 类已经有一个拆分函数,该函数接受正则表达式并将您的拆分字符串数据作为字符串数组返回。查看您的代码,您似乎没有做任何与 split 不同的事情。此外,split 函数处理正则表达式,它非常强大并且自己实现起来非常复杂。使用JDK中已经包含的久经考验的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多