java - 如何改进 2 列的字符串解析器方法(读取一行上的 2 个字符串)

标签 java string io

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/

相关文章:

ios - 如何用字符串数组中的 %20 填充空字符串 ios

c - 在一个只读 fd 上进行 IO 多路复用是否比简单地阻塞读取有助于获得更好的性能?

java - Android 上的 I/O 基准测试

java - 从文件系统和 jar 内部读取相同的文件得到不同的结果

java - 服务器错误或 Android 问题?

java - Java String比较过程

java - 谁能帮我解决依赖注入(inject)问题?

python - 删除 pandas 中的中文

java - 旋转列表<字符>并维护字数

java - IntelliJ 不允许下载任何较旧的 Oracle OpenJDK 版本(最新版本除外)