请高手进来看看 String index out of range: -1看来是下标越界,是数组里面的,注意下标的范围 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <%@ page import="java.util.*,java.lang.*,java.io.*"%><%String action=request.getParameter("action");String vote=request.getParameter("vote");String polldata="";if(action.compareTo("poll")==0){ //生成文件路径和文件名 String resultsDir="C:/tomcat/webapps/Root/business/vote/"; FileWriter resultsFile=new FileWriter(resultsDir + System.getProperty("file.separator") + "vote.txt",true); //判断文件是否存在 File myfile=new File(resultsDir + System.getProperty("file.separator") + "vote.txt"); if(!(myfile.exists())){ PrintWriter toFile= new PrintWriter(resultsFile); if(vote.compareTo("shopping")==0) polldata="1:0:0"; if(vote.compareTo("support")==0) polldata="0:1:0"; if(vote.compareTo("product")==0) polldata="0:0:1"; toFile.println("polldata"); resultsFile.close(); out.println(polldata); } else{ //其他次投票 FileInputStream tfile=new FileInputStream (resultsDir + System.getProperty("file.separator") + "vote.txt"); String str=""; int c; while ((c=tfile.read())!=-1){ str=str+(char)c; } //找到第一个“:”的位置 int first=str.indexOf(":"); //找到第二个“:”的位置 int last=str.lastIndexOf(":"); //得到String的长度 int lenth=str.length(); //取出第一个“:”前的数据 String First=str.substring(0,first); //取出第一个“:”和第二个“:”之间的数据 String Next=str.substring(first+1,last); //取出最后一个“:”后的数据 String Last=str.substring(last+1,lenth); //关闭文件 tfile.close(); //把String转换成Long Long a1=new Long(First); Long a2=new Long(Next); Long a3=new Long(Last); long b1=a1.longValue(); long b2=a2.longValue(); long b3=a3.longValue(); //把每次投票结果累加1 if(vote.compareTo("shopping")==0) b1=b1+1; if(vote.compareTo("support")==0) b2=b2+1; if(vote.compareTo("product")==0) b3=b3+1; Long c1=new Long(b1); Long c2=new Long(b2); Long c3=new Long(b3); //把Long转换成String String d1=c1.toString(); String d2=c2.toString(); String d3=c3.toString(); //总票数累加 str=d1+":"+d2+":"+d3; //把结果写入vote.txt文件中 RandomAccessFile savefile = new RandomAccessFile(resultsDir + System.getProperty("file.separator") + "vote.txt","rw"); savefile.writeBytes(str); savefile.close();} %><script language=javascript> alert("Thanks for your voting!"); self.location="../index.jsp"</script><%}%> 我研究你的的代码:可能问题是你的vote.txt是空的,if(!(myfile.exists())){的判断没有作用。你再试一试 在jsp文件中不要解固定地址。 FileInputStream tfile=new FileInputStream (resultsDir + System.getProperty("file.separator") + "vote.txt");这行代码有问题,System.getProperty("file.separator") 在windows下得到的应该是“\”而你前面用的都是‘/’,所以建议你用‘/’ 楼上几位有说错的地方:StringIndexOutOfBoundsException是说你在对字符串进行操作时出错了,而不是数组。问题自然是越界,主要表现在:取字符串的子串。看看你上面的就知道了。 if(vote.compareTo("shopping")==0) polldata="1:0:0"; if(vote.compareTo("support")==0) polldata="0:1:0"; if(vote.compareTo("product")==0) polldata="0:0:1"; toFile.println("polldata"); resultsFile.close(); out.println(polldata);toFile.println("polldata");这句好像应该是toFile.println(polldata);否则你的str里面是'polldata"而不是1:0:0,当然在你取得.indexof(":")的时候得到的是-1,随后你的substring()就暴错了吧,good luck Cannot find a Player for :file 如何解决 实现线程一个游戏功能 自定义异常用得多吗 Thing in java 第十八章第一个实例 运行有问题,请各位高手帮忙 关于跨语言衔接问题 在for循环中,如何实现变量的动态命名? applet运行问题! IBM VisualAge for Java的功能是什么? 怎么屏蔽JDialog的关闭按钮,既对话框右上角的X 哪里有卖SL-275的教材? 大虾帮忙,"="键触发KeyEvent事件中哪个常量? 求教JDBC连接SQL2000
<%
String action=request.getParameter("action");
String vote=request.getParameter("vote");
String polldata="";
if(action.compareTo("poll")==0){
//生成文件路径和文件名
String resultsDir="C:/tomcat/webapps/Root/business/vote/";
FileWriter resultsFile=new FileWriter(resultsDir + System.getProperty("file.separator") + "vote.txt",true);
//判断文件是否存在
File myfile=new File(resultsDir + System.getProperty("file.separator") + "vote.txt");
if(!(myfile.exists())){
PrintWriter toFile= new PrintWriter(resultsFile);
if(vote.compareTo("shopping")==0) polldata="1:0:0";
if(vote.compareTo("support")==0) polldata="0:1:0";
if(vote.compareTo("product")==0) polldata="0:0:1";
toFile.println("polldata");
resultsFile.close();
out.println(polldata);
}
else{
//其他次投票
FileInputStream tfile=new FileInputStream (resultsDir + System.getProperty("file.separator") + "vote.txt");
String str="";
int c;
while ((c=tfile.read())!=-1){
str=str+(char)c;
}
//找到第一个“:”的位置
int first=str.indexOf(":");
//找到第二个“:”的位置
int last=str.lastIndexOf(":");
//得到String的长度
int lenth=str.length();
//取出第一个“:”前的数据
String First=str.substring(0,first);
//取出第一个“:”和第二个“:”之间的数据
String Next=str.substring(first+1,last);
//取出最后一个“:”后的数据
String Last=str.substring(last+1,lenth);
//关闭文件
tfile.close();
//把String转换成Long
Long a1=new Long(First);
Long a2=new Long(Next);
Long a3=new Long(Last);
long b1=a1.longValue();
long b2=a2.longValue();
long b3=a3.longValue();
//把每次投票结果累加1
if(vote.compareTo("shopping")==0) b1=b1+1;
if(vote.compareTo("support")==0) b2=b2+1;
if(vote.compareTo("product")==0) b3=b3+1;
Long c1=new Long(b1);
Long c2=new Long(b2);
Long c3=new Long(b3);
//把Long转换成String
String d1=c1.toString();
String d2=c2.toString();
String d3=c3.toString();
//总票数累加
str=d1+":"+d2+":"+d3;
//把结果写入vote.txt文件中
RandomAccessFile savefile = new RandomAccessFile(resultsDir + System.getProperty("file.separator") + "vote.txt","rw");
savefile.writeBytes(str);
savefile.close();
}
%>
<script language=javascript>
alert("Thanks for your voting!");
self.location="../index.jsp"
</script>
<%
}
%>
这行代码有问题,System.getProperty("file.separator") 在windows下得到的应该是“\”而你前面用的都是‘/’,所以建议你用‘/’
if(vote.compareTo("support")==0) polldata="0:1:0";
if(vote.compareTo("product")==0) polldata="0:0:1";
toFile.println("polldata");
resultsFile.close();
out.println(polldata);
toFile.println("polldata");这句好像应该是toFile.println(polldata);
否则你的str里面是'polldata"而不是1:0:0,当然在你取得.indexof(":")的时候得到的是-1,随后你的substring()就暴错了吧,good luck