public class Base643
{
public static final String BASE64CODE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
public static final String BASE64DECODE = "ABCDEGHIJKLMQRSTUVWXYZabcdefghijlmnopqrstwxyz0123456789.";
public static final int SPLIT_LINES_AT = 76;
public Base643()
{
} public static String encodebook(String s, int i, int j)
{
String s1 = s;
if(s == null || s.length() < 10){ s1 = ""; } StringBuffer stringbuffer = new StringBuffer();; for(int l=0;l < s.length()/ 2;l++){
stringbuffer.append(s.substring(1 + l * 2, 2 + l * 2));
String s2 = stringbuffer.toString();
String s3 = s2.substring(0, i);
String s4;
if(i > 0)
s4 = (new StringBuilder(String.valueOf(s3))).append(".").append(s2.substring(i, s2.length() - j)).append(".").append(s2.substring(s2.length() - j)).toString();
else
s4 = (new StringBuilder(String.valueOf(s2.substring(i, s2.length() - j)))).append(".").append(s2.substring(s2.length() - j)).toString();
s1 = s4;
}
return s1;
} public static void main(String[] args){ System.out.println("s1 = "+encodebook("kl4ofgsmgeje5gko99s1fc2ofm", 3, 3));}
}
报错结果为
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.substring(String.java:1935)
at com.Base643.encodebook(Base643.java:79)
at com.Base643.main(Base643.java:90)还有:我不确定for循环那里的条件是for(int l=0;l < s.length()/ 2;l++)还是for(int l=0;l >= s.length()/ 2;l++)
,当改为 >= 时貌似没有进入for?直接输出的是kl4ofgsmgeje5gko99s1fc2ofm
{
public static final String BASE64CODE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
public static final String BASE64DECODE = "ABCDEGHIJKLMQRSTUVWXYZabcdefghijlmnopqrstwxyz0123456789.";
public static final int SPLIT_LINES_AT = 76;
public Base643()
{
} public static String encodebook(String s, int i, int j)
{
String s1 = s;
if(s == null || s.length() < 10){ s1 = ""; } StringBuffer stringbuffer = new StringBuffer();; for(int l=0;l < s.length()/ 2;l++){
stringbuffer.append(s.substring(1 + l * 2, 2 + l * 2));
String s2 = stringbuffer.toString();
String s3 = s2.substring(0, i);
String s4;
if(i > 0)
s4 = (new StringBuilder(String.valueOf(s3))).append(".").append(s2.substring(i, s2.length() - j)).append(".").append(s2.substring(s2.length() - j)).toString();
else
s4 = (new StringBuilder(String.valueOf(s2.substring(i, s2.length() - j)))).append(".").append(s2.substring(s2.length() - j)).toString();
s1 = s4;
}
return s1;
} public static void main(String[] args){ System.out.println("s1 = "+encodebook("kl4ofgsmgeje5gko99s1fc2ofm", 3, 3));}
}
报错结果为
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.substring(String.java:1935)
at com.Base643.encodebook(Base643.java:79)
at com.Base643.main(Base643.java:90)还有:我不确定for循环那里的条件是for(int l=0;l < s.length()/ 2;l++)还是for(int l=0;l >= s.length()/ 2;l++)
,当改为 >= 时貌似没有进入for?直接输出的是kl4ofgsmgeje5gko99s1fc2ofm
解决方案 »
- Cookies小问题,请快帮忙解决
- 发现一个奇怪问题
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 不理解?
- java如何读取串口的16进制数据呀??
- 我想编写一个处理图像的程序,其中一个功能是在图像上打上logo,大家给我个思路阿
- 大哥大姐,我是初学者,请求帮忙,急
- 各位大侠我想问一JLable 可不可以定意成数组呀!
- 请问大家,我要做一个简单的浏览器,只要输入网址,出来页面就可以了,要用到那些类阿
- 请教这段关于ObjectOutputStream的英文到底什么意思?
- *about MessageDrivenBean,使用MessageDrivenBean的朋友请进
- 菜鸟入门的一个问题,高分求教!!!过来都有分啊!!!!!!!
- 我的一小段程序,一运行就空指针错误,为什么
//public class Base643
//{
//
// public Base643()
// {
// }
//
// public static String encodebook(String s, int i, int j)
// {
// if(s != null && s.length() >= 10) goto _L2; else goto _L1
//_L1:
// String s1 = "";
//_L4:
// return s1;
//_L2:
// int k;
// StringBuffer stringbuffer;
// int l;
// k = s.length();
// stringbuffer = new StringBuffer();
// l = 0;
//_L5:
//label0:
// {
// if(l < k / 2)
// break label0;
// String s2 = stringbuffer.toString();
// String s3 = s2.substring(0, i);
// String s4;
// if(i > 0)
// s4 = (new StringBuilder(String.valueOf(s3))).append(".").append(s2.substring(i, s2.length() - j)).append(".").append(s2.substring(s2.length() - j)).toString();
// else
// s4 = (new StringBuilder(String.valueOf(s2.substring(i, s2.length() - j)))).append(".").append(s2.substring(s2.length() - j)).toString();
// s1 = s4;
// }
// if(true) goto _L4; else goto _L3
//_L3:
// stringbuffer.append(s.substring(1 + l * 2, 2 + l * 2));
// l++;
// goto _L5
// }
//
// public static byte[] zeroPad(int i, byte abyte0[])
// {
// byte abyte1[] = new byte[i];
// System.arraycopy(abyte0, 0, abyte1, 0, abyte0.length);
// return abyte1;
// }
//
// public static final String BASE64CODE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
// public static final String BASE64DECODE = "ABCDEGHIJKLMQRSTUVWXYZabcdefghijlmnopqrstwxyz0123456789.";
// public static final int SPLIT_LINES_AT = 76;
//}
里面的 2 + l * 2 > s.length,所以越界了
那么for循环那里其实应该是for(int l=0;l >= s.length()/ 2;l++)这样的对吧?可是也没出结果啊
截取字符越界
并且2楼已经说明原因..2楼+1