在不可见字符(制表符、回车 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.
中的可靠方法
我正尝试在 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.
中的可靠方法