【问题标题】:Making string contain method使字符串包含方法
【发布时间】:2016-11-18 12:38:14
【问题描述】:

我正在尝试做这个程序

int contains(String s1, String s2):接收两个字符串,并且 检查 s2 是否区分大小写。如果 s2 在 s1 中,则返回最后一次出现的 s2 的索引,否则返回 -1。

这是一个例子

Enter first string: O pikap, su pikap, bu pikap.
Enter second string: pikap
22
Enter first string: O pikap, su pikap, bu pikap.
Enter second string: pikapcik
-1

我已经写了代码,但给了我这样的错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
   at java.lang.String.charAt(Unknown Source)
   at Test.main(Test.java:12)**

为什么会出现这样的错误,我该如何解决? 我只允许使用 charAt 和 length 方法

这里是代码

public static void main(String[] args){
    String b1 = "O pikap, su pikap, bu pikap";
    String a1 = "pikap";
    String sum = "";
    int b =b1.length();
    int a =a1.length();
    for( ; b>0 ; b--){
        b = b - a;
        for(int n = 0; n < a ; n++ , b++){
            sum+= b1.charAt(b);
        }
        if(sum == a1)
            break;   
    }//for 1
    System.out.println(b-a+1);
}

【问题讨论】:

  • 你可以通过不做b1.charAt(-1)..来解决这个问题。
  • 家庭作业提醒。
  • 尝试查看 herehere 或此站点上其他数百个重复项中的任何一个。
  • 另请注意,字符串必须equals而不是==进行相等性检查

标签: java string methods


【解决方案1】:

因为在循环中每次递减它都会增加整个字符,然后发生 StringIndexOutOfBoundsException 异常 检查下面的 b- 和 b++ 条件:

for( ; b>0 ; b--){
    b = b - a;
for(int n = 0; n < a ; n++ , b++){
    sum+= b1.charAt(b);
}
if(sum == a1)
break;         }//for 1

【讨论】:

    【解决方案2】:

    如果 int b 小于 int a,你应该停止循环。当 int b 在第一个循环中减少到 4 时,运算结果 b = b-a;表示 b = -1,在第二个循环中它检查 b1.charAt(-1) 并且没有 -1。字符串 b1 的索引。顺便说一句,您可以简单地使用 str.lastIndexOf()。

    【讨论】:

      【解决方案3】:

      嗯.. 在开始自定义对象之前阅读字符串对象的文档。

          String b1 = "O pikap, su pikap, bu pikap";
          String a1 = "pikap";
          System.out.println( b1.lastIndexOf(a1)  );
      

      如果你想知道它是如何工作的

      http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.lastIndexOf%28char%5B%5D%2Cint%2Cint%2Cchar%5B%5D%2Cint%2Cint%2Cint%29

      【讨论】:

      • 我不允许使用 indexOf 方法
      • 您没有在问题中提到这一点,请使用对您提出的限制的具体情况更新您的问题。
      猜你喜欢
      • 2016-11-20
      • 2015-02-02
      • 2012-11-20
      • 2022-01-13
      • 2015-09-22
      • 2014-06-09
      相关资源
      最近更新 更多