【问题标题】:How to split a text that contains String and Int and store into an ArrayList?如何拆分包含 String 和 Int 的文本并存储到 ArrayList 中?
【发布时间】:2016-03-24 04:27:09
【问题描述】:

所以基本上我有一个使用BufferedReader 读取txt 文件的java 程序。

文本文件包含有关电影的所有信息。第一列是代码,第二列是标题,第三列是评分。
例如

1 Titanic 44  
34 Avengers 60  
2 The Lord of the Rings 100

所以 1 是代码,泰坦尼克号是标题,44 是等级等。

我的问题是我做了一个类 Movie(int code, String title, int rating) 我想在那里存储所有信息,但我不知道如何拆分文本。 split(" ") 似乎无法处理标题嵌入空格的情况(例如指环王)。

我真正需要的是能够根据空格去除第一个和最后一个字段作为分隔符,并将所有其他内部空格视为标题的一部分,而不是作为分隔符。

【问题讨论】:

标签: java string arraylist split store


【解决方案1】:

你是对的,你已经尝试过的split是不合适的。根据您显示的模式,分隔符似乎是每行中的第一个和最后一个空格,它们之间的所有内容都是标题。我建议找到这些空间的索引并使用substring()

例如:

String text = "2 The Lord of the Rings 100";
int firstSpace = text.indexOf(' ');
int lastSpace = text.lastIndexOf(' ');

String codeText = text.substring(0, firstSpace);
String title = text.substring(firstSpace, lastSpace);
String ratingText = text.substring(lastSpace);

【讨论】:

  • 我的问题是我必须将信息放在类型为“Movie(int code, String title, int rating)”的 ArrayList 中(类似于:“ArrayList movies =新的 ArrayList ();")。你向我展示的方式将所有内容(代码、标题、评级)都变成了一个字符串,所以我不能做“movie.add(代码、标题、评级)”。 (抱歉没有说清楚……第一次使用这个网站。也没有必要使用.split)
  • @Pauline 例如,您可以使用Integer.parseInt(codeText); 获取code。然后调用Movie构造函数,制作一个Movie对象
  • 你是一个有耐心的人,@ManosNikolaidis。祝福你。
  • @ErickG.Hangstrom 如果我不问这些愚蠢的问题,我应该如何学习? :)
  • 最好先修剪该字符串。 :)
【解决方案2】:

你可以使用 split(" ") 使用

String[] foo = split(" ")

foo 中的第一个元素将是第一个整数。将其转换为整数类型。然后逐步遍历其余元素并将它们附加到一个字符串中,除了 foo 中的最后一个元素,它将是您的最后一个整数,您可以将其转换为整数类型。

【讨论】:

    【解决方案3】:

    你可以试试你提到的这个我不能使用 split(" ") 因为某些标题(例如指环王)的标题之间有空格。

    String str = "2 The Lord of the Rings 100";
    String[] arr = str.split("\\s+");
    List<String> list = Arrays.asList(arr);
    

    获取arr的数据

    String code  = arr[0];
    String rate = arr[arr.length-1];
    String title = "";
    for (int i = 1; i < arr.length-1; i++) {
        title += arr[i]+" ";
    }
    

    运行代码

    System.out.println("code = " + code);
    System.out.println("rate = " + rate);
    System.out.println("title = " + title);
    

    结果如下:

    code = 2
    rate = 100
    title = The Lord of the Rings
    

    希望对您有所帮助...

    【讨论】:

      【解决方案4】:

      查看带有模式的 Regexp 和 Matcher 类:(\d*)\s(.*)\s(\d*)

      编辑:示例

      @Test
      public void testRegExp(){
          String text = "2 The Lord of the Rings 100";
          String patternString = "(\\d*)\\s(.*)\\s(\\d*)";
          Pattern pattern = Pattern.compile(patternString);
      
          Matcher matcher = pattern.matcher(text);
          while (matcher.find()) {
              System.out.println("CODE : " + matcher.group(1));
              System.out.println("TITLE : " + matcher.group(2));
              System.out.println("RATE : " + matcher.group(3));
          }
      }
      

      【讨论】:

        【解决方案5】:
        String line = "1 Titanic 44";
        int code = Integer.valueOf(line.split(" ")[0]);
        String title = line.split(" ")[1];
        int rank = Integer.valueOf(line.split(" ")[2]);
        

        【讨论】:

        • 不处理嵌入空格的标题。
        猜你喜欢
        • 1970-01-01
        • 2014-11-17
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        相关资源
        最近更新 更多