我是Stackoverflow的新成员,但我之前一直在这里阅读,以帮助我完成Java的第一步。我现在是大学生,所以我现在没有比if,loop和array更深入的知识了。
我目前正在努力,但过去几天我一直停滞不前。我坚持使用这个拒绝工作的子串。
我觉得有点愚蠢的寻求帮助,因为我确定这是一个错误,每个人都可以在2秒钟内看到但是我不能把它放在手指上......无论如何我通常不会问,但我需要手它过了几天......
在这里:
输入是一个texte文件,但是ligne = fichier.substring将其剪切为:
Evariste Galois,3,7.5,8.5,10.0,5.5,2.5,0.0,3.4
private static String fabriquerRapport(String input)
{
String output = input;
double tauxHoraire = 15.65;
double tauxAugmentation = 0.015;
String nom = "";
int ancien = 0;
double lundi = 0;
double mardi = 0;
double mercredi = 0;
double jeudi = 0;
double vendredi = 0;
double samedi = 0;
double dimanche = 0;
String ligne = "";
String fichier = output;
String chaine = "";
int indice = ligne.indexOf(",");
double reg = 0;
double supp = 0;
double total = 0;
java.util.Calendar c = java.util.Calendar.getInstance();
String date = String.format("%1$tY-%1$tm-%1$te %1$tH:%1$tM",c);
output = "================================================================================================\n" ;
output += "RGT Media : Rapport de charge salariale Comptable : XXXXXXXXXXXXXXX\n" ;
output += "Date : " + date +"\n";
output += "================================================================================================\n" ;
output += " A L M M J V S D Reg. Supp. Salaire \n" ;
output += "================================================================================================\n" ;
ligne = fichier.substring(0 , fichier.indexOf("\n"));
nom = ligne.substring(0,indice);
if(nom.length()>27) nom = nom.substring(0, 23) + "...";
ligne = ligne.substring(indice+1);
output += nom;
return output;
}
不介意未使用的变量,还有更多,但我为这篇文章删除了很多,因为大多数是在评论中,因为我在这里被阻止了。抱歉,变量是法语的,但我想你仍然能够理解他们在做什么。
问题是nom的ligne.substring。它应该从字符串的开头到String的indice是indexOf“,”但它给了我一个java.lang.StringIndexOutOfBoundsException:字符串超出范围:-1错误我真的似乎无法找到为什么。我通常通过在线搜索找到解决问题的方法,但不是这次。我最近一直很累,所以也许这就是为什么我找不到解决方案:P但是我真的被困住了所以请大家好,我需要你的帮助!
感谢TheBigBang914
答案 0 :(得分:2)
你在谈论这三条线:
int indice = ligne.indexOf(",");
...
ligne = fichier.substring(0 , fichier.indexOf("\n"));
nom = ligne.substring(0,indice); // exception here (you say)
如果你得到:
java.lang.StringIndexOutOfBoundsException: String out of range: -1
它清楚地告诉您,您正在使用-1
作为其中一个界限。显然,第一个边界为零,但您使用indexOf
的结果作为第二个边界。如果indexOf
找不到所需的字符串,则会返回-1
。
因此问题的原因是一行不包含","
。
前一行的逻辑也存在问题。
fichier
根本没有换行符,则前一行会抛出异常。fichier
使用不同的行分隔符序列(例如"\r\n"
(Windows)或"\r"
(Mac)),则可能会发生各种各样的事情。fichier
包含多行,并且第一行不是逗号,则行修剪将删除indexOf(",")
调用找到的字符,后续ligne.substring(0, indice)
将失败这有点假设,因为我们不知道您的fabriquerRapport
可能会遇到什么输入。但是,很明显它会得到意想不到的输入......因此建议使其更加健壮。
<强>更新强>
实际上,虽然以上所有都是有效的。我认为真正的问题是,你正在解析错误的字符串。看看如何初始化ligne
。当然,您应该将其初始化为input
...而不是""
!!!
答案 1 :(得分:0)
错误是因为fichier.indexOf("\n")
这会返回-1。根据代码看起来你想要将字符串fichier分成行。您可以使用拆分来执行此操作。
String[] lines = string.split(System.getProperty("line.separator"));
答案 2 :(得分:0)
int indice = ligne.indexOf(&#34;,&#34;);是问题。该声明将在指数中返回-1。打印indice的值并检查。当您尝试查找索引为-1的子字符串时,它将显示异常。