比较两个文件并给出输出,其中哪个文件的计数最高

时间:2019-03-28 16:03:17

标签: java

我的代码的问题是,有时它会读取并比较字符串而没有任何问题,但是在比较其他字符串时,它还会引发错误。我认为我的比较功能无法达到标准,我需要在哪里有效设置代码以使我的比较功能有效地工作?

有人可以建议我一些吗?到目前为止,我已经尝试使用bufferedReader比较两个文件。我的代码在某种程度上可以正常工作,但同时遇到错误

  

“线程“主”中的异常”   java.lang.StringIndexOutOfBoundsException:“

我有几张照片直观地描述了我的问题。我认为我的 findtarget 函数不够准确,这就是为什么它会不断抛出这些异常的原因

  

ERROR:单击此处查看图像。

     

NO-ERROR:单击此处查看图像。

这是我的两个文件,分别包含肯定和否定关键字。

  

NEGITIVE:文件扩展名为negi.txt

     

POSITIVE:文件扩展名为posi.txt

这是用于比较字符串的findtarget函数。

public static int findTarget(String target, String source) 
{

    int target_len = target.length();
    int source_len = source.length();

    int add = 0;

    // this function check the character whether it is present.       
    for (int i = 0; i < source_len; ++i) // i is a varialbe used to count upto source_len.
    {

        int j = 0; // take another variable to count loops
        //int[] k = new int[100];

        while (add == 0) 
        {
            if (j >= target_len) // count upto target length
            {
                break;
            } 
            else if (target.charAt(j) != source.charAt(i + j)) 
            {
                break;
            } 
            else 
            {
                ++j;
                if (j == target_len) 
                {
                    add++; // this will return 1: true
                }
            }
        }
    }
    return add;
    //System.out.println(""+add);
}

这是我的完整代码,以防万一您想运行它们。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.io.FileWriter;


public class test {
    public static int findTarget(String target, String source) 
    {

        int target_len = target.length();
        int source_len = source.length();

        int add = 0;

        // this function check the character whether it is present.       
        for (int i = 0; i < source_len; ++i) // i is a varialbe used to count upto source_len.
        {

            int j = 0; // take another variable to count loops
            //int[] k = new int[100];

            while (add == 0) 
            {
                if (j >= target_len) // count upto target length
                {
                    break;
                } 
                else if (target.charAt(j) != source.charAt(i + j)) 
                {
                    break;
                } 
                else 
                {
                    ++j;
                    if (j == target_len) 
                    {
                        add++; // this will return 1: true
                    }
                }
            }
        }
        return add;
        //System.out.println(""+add);

    }



public static void main(String... args) 
{
// function 1
        //this variable can be called from any place inside this main function.
        int testing1 = 0; 
        int testing2 = 0;
        try {

            //reads user review and store them inside source1
            Scanner sc = new Scanner(System.in);

            System.out.println("Enter your review: ");
            String source1 = sc.nextLine();

            //establising a file object
            File file = new File("posi.txt");
            BufferedReader br1 = new BufferedReader(new FileReader(file));

            //establising a file object
            File file2 = new File("negi.txt");
            BufferedReader br2 = new BufferedReader(new FileReader(file2));

            String target1; // using a string variable to read the content of the file posi.txt

            while ((target1 = br1.readLine()) != null) //as long the condition is not null it will keep printing.
            {      
                testing1 += test.findTarget(target1, source1); // supplying two arguments to findtarget function.
            }

            String target2; // using a string variable to read the content of the file negi.txt

            while ((target2 = br2.readLine()) != null) //as long the condition is not null it will keep printing.
            {                           
                testing2 += test.findTarget(target2, source1); // supplying two arguments to findtarget function.
            }
            br1.close(); br2.close();
            System.out.println("positive is:"+testing1 +"\nnegative is :"+testing2); //-not going to print now! :D-
            System.out.println("\nthank you for your feedback! :)");

            } 
            catch (IOException e) 
            {
            System.out.println("file error!");
            }


            // this function is an area where it stores the return value inside a file called pos.txt
            try 
            {  
            FileWriter myWriter = new FileWriter("pos.txt",true); 
            // using the true condition makes the line move to the next line.

            myWriter.write(" "+testing1);
            myWriter.close();
            } 
            catch (IOException e) 
            {
            System.out.println("An error occurred.");      
            }

            // writing neg inside a file called neg.txt
            try 
            {        
            FileWriter myWriter = new FileWriter("neg.txt",true); 
            // using the true condition makes the line move to the next line.

            myWriter.write(" "+testing2);
            myWriter.close();
            } 
            catch (IOException e) 
            {
            System.out.println("An error occurred.");      
            }

        // to evaluate an output based on highest count.
        if(testing1 > testing2)
            System.out.println("it is positive");
        else if (testing1 == testing2)
            System.out.println("it is neutral");
        else
            System.out.println("it is negative"); 
    }    
}

2 个答案:

答案 0 :(得分:1)

最后,我能够使用称为“ regionmatches” string方法之一来解决此问题。注意:请确保您的肯定文件和否定文件按字母顺序排列。这将为您提供准确的增量。

Github:使用我的链接下载肯定和否定关键字。

public static int findTarget(String target, String source) //method/function
    {   
       String sourcee = source;
       String targett = target;

        int source_len = sourcee.length(); 
        int target_len = targett.length();     
        /* 
        **this function check the character whether it is present using one of string methond called "regionmatch"
        **regionMatches(int toffset, String other, int ooffset,int len)
        */       
        int add = 0;       
        boolean foundIt = false;    
        for (int i = 0;i <= source_len - 1;i++) 
        {
           if (sourcee.regionMatches(i, targett, 0, target_len))
           {
              foundIt = true;
              break;
           }
        }      
        //checking 
        if(!foundIt)
        {
            // do nothing.
        }
        else
        {
            add++;
        }  
        return add; //returns incrementation
    }

答案 1 :(得分:0)

您将i增加到source的长度,但是您致电

.
.
.
    else if (target.charAt(j) != source.charAt(i + j))
.
.
.

在某些时候超过了源代码的长度。

让我们说i == source.length,然后source.charAt(i + j)会在j > 0时引发异常。