java程序 报错 java.lang.StringIndexOutOfBoundsException: String index out of range: 1 20
各位麻烦帮我看下我的代码,知道是越界不过不知道50行这个位置哪里错了~packagebp;importjava.io.BufferedReader;importjava....
各位麻烦帮我看下我的代码,知道是越界不过不知道50行这个位置哪里错了~
package bp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class replace {
public static void SwitchStr(String substr,int[][] matri,int i){
switch(substr.charAt(0)){
case 'A': matri[0][i]=1;break;
case 'C': matri[1][i]=1;break;
case 'D': matri[2][i]=1;break;
case 'E': matri[3][i]=1;break;
case 'F': matri[4][i]=1;break;
case 'G': matri[5][i]=1;break;
case 'H': matri[6][i]=1;break;
case 'I': matri[7][i]=1;break;
case 'K': matri[8][i]=1;break;
case 'L': matri[9][i]=1;break;
case 'M': matri[10][i]=1;break;
case 'N': matri[11][i]=1;break;
case 'P': matri[12][i]=1;break;
case 'Q': matri[13][i]=1;break;
case 'R': matri[14][i]=1;break;
case 'S': matri[15][i]=1;break;
case 'T': matri[16][i]=1;break;
case 'W': matri[17][i]=1;break;
case 'V': matri[18][i]=1;break;
case 'Y': matri[19][i]=1;break;
}
}
public static void ReplaceStr(String str,BufferedWriter output){
int[][] zoStrmatr=new int[20][20];
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
zoStrmatr[i][j]=0;
for(int i=0;i<zoStrmatr.length;i++){
SwitchStr(str.substring(i, i+1),zoStrmatr,i);
}
try {
for(int ij=0;ij<20;ij++){
for(int j=0;j<20;j++){
output.write(zoStrmatr[ij][j]+" ");
}
output.write("\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
String fileName = "bcpred.pos.20mer.nr80.txt";
BufferedReader br = new BufferedReader(new FileReader(fileName));
String content = null;
try {
File f = new File("input.txt");
if(f.exists()){
System.out.print("文件存在");
}else{
System.out.print("文件不存在");
f.createNewFile();//不存在则创建
}
//读入文件
BufferedWriter output = new BufferedWriter(new FileWriter(f));
int i=0;
while((content = br.readLine()) != null){
ReplaceStr(content.trim(),output);
i++;
output.write("\n");
}
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
txt里面是
KLGAAASSPDAHVPFCFGKD
ETINEEAAEWDRVHPVHAGP
GAAGSTMGAASMTLTVQARQ
AAAAAGTGNSSQVSQNYPIV
这样的701行数据可是每次input里面就生成到680多行就停住了,谢谢了
控制台是这样显示的
文件存在java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.substring(String.java:1935)
at bp.replace.ReplaceStr(replace.java:50)
at bp.replace.main(replace.java:88) 展开
package bp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class replace {
public static void SwitchStr(String substr,int[][] matri,int i){
switch(substr.charAt(0)){
case 'A': matri[0][i]=1;break;
case 'C': matri[1][i]=1;break;
case 'D': matri[2][i]=1;break;
case 'E': matri[3][i]=1;break;
case 'F': matri[4][i]=1;break;
case 'G': matri[5][i]=1;break;
case 'H': matri[6][i]=1;break;
case 'I': matri[7][i]=1;break;
case 'K': matri[8][i]=1;break;
case 'L': matri[9][i]=1;break;
case 'M': matri[10][i]=1;break;
case 'N': matri[11][i]=1;break;
case 'P': matri[12][i]=1;break;
case 'Q': matri[13][i]=1;break;
case 'R': matri[14][i]=1;break;
case 'S': matri[15][i]=1;break;
case 'T': matri[16][i]=1;break;
case 'W': matri[17][i]=1;break;
case 'V': matri[18][i]=1;break;
case 'Y': matri[19][i]=1;break;
}
}
public static void ReplaceStr(String str,BufferedWriter output){
int[][] zoStrmatr=new int[20][20];
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
zoStrmatr[i][j]=0;
for(int i=0;i<zoStrmatr.length;i++){
SwitchStr(str.substring(i, i+1),zoStrmatr,i);
}
try {
for(int ij=0;ij<20;ij++){
for(int j=0;j<20;j++){
output.write(zoStrmatr[ij][j]+" ");
}
output.write("\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
String fileName = "bcpred.pos.20mer.nr80.txt";
BufferedReader br = new BufferedReader(new FileReader(fileName));
String content = null;
try {
File f = new File("input.txt");
if(f.exists()){
System.out.print("文件存在");
}else{
System.out.print("文件不存在");
f.createNewFile();//不存在则创建
}
//读入文件
BufferedWriter output = new BufferedWriter(new FileWriter(f));
int i=0;
while((content = br.readLine()) != null){
ReplaceStr(content.trim(),output);
i++;
output.write("\n");
}
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
txt里面是
KLGAAASSPDAHVPFCFGKD
ETINEEAAEWDRVHPVHAGP
GAAGSTMGAASMTLTVQARQ
AAAAAGTGNSSQVSQNYPIV
这样的701行数据可是每次input里面就生成到680多行就停住了,谢谢了
控制台是这样显示的
文件存在java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.substring(String.java:1935)
at bp.replace.ReplaceStr(replace.java:50)
at bp.replace.main(replace.java:88) 展开
7个回答
展开全部
你在main方法里调用ReplaceStr(content.trim(),output)方法时,content的长度是多少呢?如果长度小于20的话在下面会报数组索引出界的错
for(int i=0;i<zoStrmatr.length;i++){
SwitchStr(str.substring(i, i+1),zoStrmatr,i);
}
这里面str.substring(i,i+1)里的i+1=20的话会报错的
for(int i=0;i<zoStrmatr.length;i++){
SwitchStr(str.substring(i, i+1),zoStrmatr,i);
}
这里面str.substring(i,i+1)里的i+1=20的话会报错的
追问
恩 不是这个问题 呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(rs.next())
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
我估计是不是
String max = rs.getString("maxint"); //获得最大的字段
这句话没有获得到值 导致了 null或者 长度<3
然后下面再 max.substring(2,max.length()); //截取子字符串
就会抛上面的错误
你先确定一下max是不是空
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
我估计是不是
String max = rs.getString("maxint"); //获得最大的字段
这句话没有获得到值 导致了 null或者 长度<3
然后下面再 max.substring(2,max.length()); //截取子字符串
就会抛上面的错误
你先确定一下max是不是空
追问
???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while((content = br.readLine()) != null){
ReplaceStr(content.trim(),output);
i++;
output.write("\n");
}
如果你读到的是个空行记录 也就是空字符串 就会引起程序50行的下标越界 str.substring(i,i+1),因为不存在i+1个字符
ReplaceStr(content.trim(),output);
i++;
output.write("\n");
}
如果你读到的是个空行记录 也就是空字符串 就会引起程序50行的下标越界 str.substring(i,i+1),因为不存在i+1个字符
追问
额你好 不过为什么还没写到最后一行就写不下去了呢
追答
你这行都报错了,后面的当然就不执行了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组越界了
追问
恩,你好,不知道具体是怎么错的,我也知道数组越界的呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询