【问题标题】:Why my indexOf value is not returning the right result?为什么我的 indexOf 值没有返回正确的结果?
【发布时间】:2021-02-22 18:42:06
【问题描述】:

我正在为一个程序编写这个小部分,我将在 java 中为名称的首字母编写,我需要确定其中每个空格的位置以便能够选择首字母。我正在测试它以确保在行中的正确位置看到空格,但由于某种原因,位置总是出错!请帮帮我。

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("please enter full name:");
    String name = in.nextLine();
    int space = name.indexOf(" ");
    int space1 = name.indexOf(" ", space) + space+1;
    int space2 = name.indexOf(" ", space1) + space1+1;
    int space3 = name.indexOf(" ", space2) + space2+1;
    int space4 = name.indexOf(" ", space3) + space3+1;
    int space5 = name.indexOf(" ", space4) + space4+1;
    System.out.println(space + " " + space1 + " " + space2 + " " + space3 + " " + space4);      
  }
}

我使用这一行的想法是对出现在最后一行之后的行空间的每一部分进行计数,然后加 1,因为 java 从 0 开始计数。

(" ", 空格1) + 空格1+1;

基本上,如果名字是“Jeff Luiz Jeff Luiz”,第一个空格在 4,下一个空格在 9,所以 4,然后在这个空格之后继续计数,从0开始,会再次找到4(因为Luiz的字母数量相同),与最后一个空格数相加以跟踪实际位置(然后它会是 8),最后总结为 1,因为 java 是如何工作的,依此类推。当我运行这 4 个单词时,我发现了结果 4 9 19 19 19。有人知道我的代码有什么问题吗?

【问题讨论】:

  • "Jeff Luiz Jeff Luiz" 的预期输出是什么?
  • 获取第二个空格的索引需要使用int space1 = name.indexOf(" ", space + 1);

标签: java string methods indexof


【解决方案1】:

替换

int space1 = name.indexOf(" ", space) + space+1;

int space1 = name.indexOf(" ", space + 1);

因为String#indexOf(String str, int fromIndex) 返回此字符串中第一次出现指定子字符串的索引,从指定索引开始。

演示:

public class Main {
    public static void main(String[] args) {
        String name = "Arvind Kumar Avinash";
        int space = name.indexOf(" ");
        int space1 = name.indexOf(" ", space + 1);
        System.out.println(space + ", " + space1);
    }
}

输出:

6, 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多