【问题标题】:indexOf() returning -1 when looking for spacesindexOf() 在查找空格时返回 -1
【发布时间】:2017-02-01 22:46:48
【问题描述】:

我在尝试分隔字符串中的单词时使用 indexOf() 查找空格,但索引关闭一直返回 -1;这是我的代码:-

import java.util.Scanner;

class Main {
  public static void main(String[] args){
    Scanner y = new Scanner(System.in);
    System.out.println("Enter the String");
    String s = y.nextLine();
    int words = 1;
    for (int i = 0; i < s.length(); i++) {
     if(s.charAt(i)==' ') words++;
    }
    String[] a = new String[words];
    int l = s.length();
    for (int i = 0; i <= words; i++) {
      int r = s.indexOf(" ");
      a[i] = s.substring(0, r);
      s = s.substring((r + 1), l);
    }
    for(int i = 0; i <= words; i++) {
      System.out.println(a[i]);
    }
  }
}

【问题讨论】:

  • 这是你做过的minimal reproducible example吗?只需System.out.println(s.indexOf(" ")); 就足够了;)。 PS:看String.split(String)
  • @AxelH 不,因为只有这一行留下了太多的解释,例如s 的外观以及在调用 indexOf() 之前是否以及如何更改。
  • @AlexH 哦,拜托,这已经够小了,不,一行是不完整的。
  • s.indexOf(" ") 是否最终返回 -1 或 _always,即第一次也是如此?您是否检查过输入中确实有空格,即您能否提供一些输入样本?
  • @All,好吧,既然没有任何解释,对我来说这还不够。没有输入/输出的代码......所以你要么添加输入/输出,要么删除一些可能改变行为的复杂性......

标签: java string indexof


【解决方案1】:

问题是你从 1 开始 words 并为你找到的每个空间增加它。因此,如果有一个空格,words 是 2。然后你试图寻找那么多空格 - 但只有 1 个,所以当它用完空格来查找时,它返回 -1 并且你得到异常。

【讨论】:

    【解决方案2】:

    你可以直接使用String.split,例如:

    String s=y.nextLine();
    for(String i : s.split(" ")) {
       System.out.println(i);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2016-03-10
      • 2018-01-17
      • 1970-01-01
      • 2017-04-03
      • 2012-01-25
      相关资源
      最近更新 更多