Java charAt() 字符串索引超出范围:5
Posted
技术标签:
【中文标题】Java charAt() 字符串索引超出范围:5【英文标题】:Java charAt() String index out of range: 5 【发布时间】:2015-10-01 05:47:54 【问题描述】:我想弄清楚“哪个 5 位数字乘以 4 会得到相反的结果?”使用此代码,但出现错误:线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 在 java.lang.String.charAt(String.java:658) 在 Digits.main(Digits.java:12)
public class Digits
public static void main(String[] args)
int n = 0;
int b = 0;
String number = Integer.toString(n);
String backwards = Integer.toString(b);
for (int x = 9999; x < 100000 ; x++ )
n = x;
b = x *4;
if (number.charAt(0) == backwards.charAt(5 )&& number.charAt(1) == backwards.charAt(4)
&& number.charAt(2) == backwards.charAt(3) && number.charAt(3) == backwards.charAt(2)
&& number.charAt(4) == backwards.charAt(1) && number.charAt(5) == backwards.charAt(0))
System.out.println(n);
break;
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:正确。因为前五个字符位于索引0, 1, 2, 3
和4
。我会使用StringBuilder
(因为StringBuilder.reverse()
)。而且,我建议您限制变量的可见性。然后记得在更改n
和/或b
时修改number
和backwards
。类似的东西
for (int x = 9999; x < 100000; x++)
int n = x;
int b = x * 4;
String number = Integer.toString(n);
String backwards = Integer.toString(b);
StringBuilder sb = new StringBuilder(number);
sb.reverse();
if (sb.toString().equals(backwards))
System.out.printf("%s * 4 = %s", number, backwards);
我得到了
21978 * 4 = 87912
【讨论】:
你对我来说太快了,弗里施!【参考方案2】:backwards
和number
是String
,内部使用一个数组。并且数组的索引从 0 到 size-1 。因此这样的语句会抛出 ArrayIndexOutOfBoundsException:
backwards.charAt(5 )
number.charAt(5)
【讨论】:
您的观察是正确的,但这无助于解决他的代码中的问题。【参考方案3】:在您创建字符串时,您的两个整数都是 0,因此您的两个字符串在程序执行期间都是“0”。您真正想要的是每次您的号码更改时都会更改的字符串。所以你的代码应该看起来更像这样:
public class Digits
public static void main(String[] args)
int n = 0;
int b = 0;
String number;
String backwards;
for (int x = 10000; x < 100000 ; x++ )
n = x;
b = x *4;
number = Integer.toString(n);
backwards = Integer.toString(b)
. . .
此外,Java 中的数组是零索引的,因此对于字符串“10000”,您的程序将在backwards.charAt(5)
上抛出索引越界异常,因为该字符串的索引是从字符 0 到字符 4。
【讨论】:
以上是关于Java charAt() 字符串索引超出范围:5的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate OGM - java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1
线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:7
java.sql.SQLException:spring boot中的参数索引超出范围(6>参数个数,即5)
使用 scala 和 android-plugin 的 Proguard:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:160