#java
#java
Вопрос:
я работаю над программой, использующей метод Jarowinkler для сравнения строк ….. метод jaro winkler выдает значения в диапазоне от 0 до 1 на основе сходства строк. у меня есть два огромных файла базы данных, один из которых действует как ссылка, а другой — как база данных с дубликатами в ней. используя файл ссылки, мне нужно найти исходные данные из файла дубликата базы данных…. вот ошибка :::
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at read.main(read.java:66)
вот программа:
import java.util.*;
import java.io.*;
class read
{
public static void main(String args[]) throws IOException
{
int countcolumns=0,countrows=0;
JaroWinkler j=new JaroWinkler();
quicksort e=new quicksort();
PrintWriter out=new PrintWriter("res.txt");
PrintWriter sort=new PrintWriter("sort.txt");
PrintWriter fin=new PrintWriter("resultfinal.txt");
double d=0;int i=0,l=0;
int count=0;
File f=new File("firstlistedited.txt");
Scanner s=new Scanner(f);
//File fil=new File("res.txt");
//Scanner sca=new Scanner(fil);
double r[]=new double[100000];
String a,b,c;
while(s.hasNext())
{
a=s.nextLine();
File fi=new File("result.txt");
Scanner sc=new Scanner(fi);
i=0;
while(sc.hasNext())
{
b =sc.nextLine();
d=j.benzerlikOrani(a,b);
if(d>0.70)
{
r[i]=d;
i ;
//System.out.println("value on comparing " a " and " b " is " d);
out.println(a "/" b "=" d);
}
}
quicksort.quicksorts(r, 0, 99999);
//System.out.println(a);
//System.out.println("array is " r[0]);
sort.println("array is " r[1]);
sort.println("array is " r[2]);
sort.println("----------------");
File fil=new File("res.txt");
Scanner sca=new Scanner(fil);
int count1=0;
while(sca.hasNext())
{
count1 ;
c =sca.nextLine();
String st="0.00",str="0.00";//,str1="",str2="";
int num=c.length();
for(int x=0;x<num;x )
{
if(c.charAt(x)=='=')
{
st=c.substring(x 1, num);
//System.out.println(c.substring(x 1, num));
}
}
//————————————————————————————-
//double dob=Double.valueOf(st.trim()).doubleValue();
double dob=Double.parseDouble(st); //here is the error
//————————————————————————————-
if(count1>=count)
{
if(r[0]==dob)
{
for(int x=0;x<num;x )
{
if(c.charAt(x)=='/')
{
str=c.substring(x 1, num);
//String str=c.substring(a.length(),num-a.length() 4);
System.out.println("comparing " a " with " str);
fin.println("comparing " a " with " str);
}
}
}
}
}
count=count1;
System.out.println("------------- ");
}
out.close();
sort.close();
fin.close();
}
}
любая помощь приветствуется..
Комментарии:
1. Не могли бы вы, пожалуйста, поместить весь код в блок кода, это будет легче читать. Из того, что я вижу в StackTrace, ошибка возникает в строке 66. Что именно это за строка?
2. можете ли вы показать нам строку, которая вызывает исключение?
3. Ваша строка заканчивается на =?
4. Вы пробовали пошагово просматривать свой код с помощью отладчика? Что вы обнаружили?
Ответ №1:
Ну, в какой-то момент, когда выполняется строка, в которой возникает ошибка, переменная st
содержит пустую строку. Я думаю, это произойдет, когда ваш файл res.txt
содержит пустую строку, но возможно и при других обстоятельствах. Мы не можем воспроизвести это без входных файлов.
Честно говоря, такого рода ошибки — это именно то, что вы используете в отладчике (перед обращением к людям за помощью). Научитесь использовать one, это очень поможет вам в будущем.