public class testing_string {
public static void read_doc_word(String line){
String doc_id = "" ;
String word_id = "" ;
boolean doc_id_ends = false ;
for(int i = 0 ; i < line.length() ; i++){
if(line.charAt(i) == 9) doc_id_ends = true ; // 9 is TAB in asci
else if(doc_id_ends == false) doc_id += line.charAt(i) ;
else if( doc_id_ends == true) word_id += line.charAt(i) ;
}
System.out.println("doc id " + doc_id ) ;
System.out.println("word id " + word_id ) ;
}
public static void main(String[] args) {
String x = "1 29" ;
read_doc_word(x) ;
}
}
输入:每行有2个数字。 有什么更好的方法呢? 我想避免丑陋的“doc_id += line.charAt(i)”, 将每个字符连接到字符串。
我该怎么做:
- 在制表符之前读取整个字符串
- 跳过标签
- 在制表符后读取整个字符串
或者唯一的方法是检查每个字符? (就像我一样)我想避免检查每个字符!
最佳答案
您应该使用String.split()
。
请引用this文档。
因此您的代码可以修改如下:
public static void read_doc_word(String line){
String doc_id = "" ;
String word_id = "" ;
String[] split ;
split = line.split("\\t");
if(split.length==2){
doc_id = split[0];
word_id = split[1];
}
System.out.println("doc id " + doc_id ) ; \\ 1
System.out.println("word id " + word_id ) ; \\29
}
请注意,为了按制表符分割,您需要使用正则表达式"\\t"
,而不仅仅是"\t"
。
关于java - 如何改进 2 列的字符串解析器方法(读取一行上的 2 个字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22422092/