每当我运行代码时,它都会返回以下错误消息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(Unknown Source)
at codes.Main.main(Main.java:10)
这是我的代码:
package codes;
public class Main {
public static void main(String[] args) {
String cord1 = "Name: x=23 y=60 z= 600";
String cord2 = "Name: x=200 y=20 z= 300";
int c1 = cord1.length();
String mychar = String.valueOf("cord1".charAt(0));
for (int a = 0; a < c1; a++){
mychar = String.valueOf("cord1".charAt(a));
if (mychar == ":"){
break;
}else{
cord1.substring(a);
}
}
}
}
答案 0 :(得分:1)
您的代码中有很多错误。.
mychar == ":"
应该改为mychar.equals(":")
。由于字符串是不可变的,因此我们需要使用.equals
而不是==
来比较它们(<-用于检查引用是否相等而不是字符串值)。"cord1".charAt
应该是您的变量cord1.charAt
。通过使用"cord1"
,您基本上可以创建一个值为cord1
的新字符串。cord1.substring(a);
不会更改cord1
的值,而是返回一个新的String。因此,您必须保存或打印此String结果,然后使用break
停止循环。cord1 = cord1.substring(a)
会缩短字符串本身。由于您仍然在[0, c1)
是原始String的范围c1
中循环,因此我们仍然会收到StringIndexOutOfBoundsException。相反,您不需要else-case,并且在if-case内同时需要cord1 = cord1.substring(a)
和break
。 (此外,我假设您也要删除:
本身,因此必须使用.substring(a+1)
。)String.valueOf( char )
而不是自己使用char
?并不是真正的要求,但是String.valueOf
在这里有点多余,并且使代码的可读性降低。将它们放在一起:
public class Main {
public static void main(String[] args) {
String cord1 = "Name: x=23 y=60 z= 600";
System.out.println("cord1 before:\t" + cord1);
int c1 = cord1.length();
char mychar = cord1.charAt(0);
for (int a = 0; a < c1; a++){
mychar = cord1.charAt(a);
if (mychar == ':'){
cord1 = cord1.substring(a+1);
break;
}
}
System.out.println("cord1 after:\t" + cord1);
}
}
这将导致cord1
的末尾值为" x=23 y=60 z= 600"
(请注意前导空格)。
这是一个更简单的替代方法,其结果相同:
String cord1 = "Name: x=23 y=60 z= 600";
String cord1ExcludingName = cord1.replaceFirst("^.*:","");
^ : Only look at the start of the String for:
.* : Zero or more of any character,
: : followed by a `:`
其中将替换为""
(空字符串),因此基本上将其删除。
答案 1 :(得分:0)
使用等于代替“ ==” 像这样
if (mychar.equals(":")){
break;
由于要使用字符串,因此需要使用equals方法。每当您使用字符串u时,都必须将它们与equals方法进行比较。 如果您使用
char myChar = .....
您的代码将起作用。您可以将字符与“ ==“
进行比较答案 2 :(得分:0)
B
表示您正在查找具有最高索引4的字符串“ cord1”的第0个字符,这就是为什么它会在5处发出超出范围的异常的原因。
您要做的是String.valueOf("cord1".charAt(0))
。这将考虑变量String.valueof(cord1.charAt(0))
中的字符串。