阅读.txt文档并在Java

时间:2016-01-07 01:06:03

标签: java string compiler-errors

我一直在研究一个程序,它读取一个文件然后找到所有的X并将它们返回为0,这样我就可以在我的完整程序中使用它。

到目前为止,我在转换为字符串方面遇到了很多问题。我目前收到错误消息:

线程“main”中的异常java.lang.Error:未解决的编译问题:     此方法必须返回String

类型的结果

这是我的代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class ReadMagicSquare {

    public static String Replace(String filename) {
        try {
            Scanner file = new Scanner(new File(filename));
            System.out.println(file);
            StringBuilder b = new StringBuilder();
            String s = "";
            int n = 0;
            while(file.hasNextLine()){

                s = file.nextLine();

                n++;

                if (s == "X") {
                    s = "0";
                    b.append(s).append(System.getProperty("line.separator"));
                    return b.toString();
                } else {
                    return b.toString();
                }

                }

        } catch (Exception e) {

        }
    }

    static int[][] matrix;
    int size = -1;
    int log10 = 0;
    String numberFormat;

    public ReadMagicSquare(String filename) {
        try {
            readFile("test1.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void readFile(String filename) throws IOException {

        BufferedReader John= new BufferedReader(new FileReader("test1.txt"));

        String line;
        int j = 0;

        while ((line = John.readLine()) != null) {
            String[] vals = line.trim().split("\\s+");

            if (matrix == null) {
                size = vals.length;
                matrix = new int[size][size];
                log10 = (int) Math.floor(Math.log10(size * size)) + 1;
                numberFormat = String.format("%%%dd", log10);
            }

            for (int i = 0; i < size; i++) {
                matrix[j][i] = Integer.parseInt(vals[i]);
            }

            j++;
        }
    }

    public String toString() {
        StringBuffer John1 = new StringBuffer();

        if (matrix != null) {
            for (int j = 0; j < size; j++) {
                John1.append(" ");
                for (int i = 0; i < size; i++) {
                    John1.append(String.format(numberFormat,  matrix[j][i]));

                }
                if (j < size - 1) {

                    John1.append("\n");
                } else {
                    John1.append("");
                }
            }
        }

        return John1.toString();
    }
    public static void main(String[] args) {
        Replace("test1.txt");    
        ReadMagicSquare square = new ReadMagicSquare("square.txt");
        System.out.println(square.toString());
        System.out.println(matrix[3][0]);

    }
}

你们有谁知道原因可能是什么?谢谢你的时间!

编辑:

非常感谢您的投入!我做了以下更改但仍有问题:

public static String Replace(String filename) {
    try {
        Scanner file = new Scanner(new File(filename));
        System.out.println(file);
        StringBuilder b = new StringBuilder();
        String s = "";
        int n = 0;
        while(file.hasNextLine()){

            s = file.nextLine();

            n++;

            if (s.equals("X")) {
                s = "0";
                b.append(s).append(System.getProperty("line.separator"));
                b.toString();
            } else {
                return b.toString();
            }

            }

    } catch (Exception e) {
        return null;
    }
    try (PrintStream out = new PrintStream(new   FileOutputStream("test1,1.txt"))) {
        out.print(b);
    }
}

我现在有out.print(b)的问题;线。它给了我错误:

b无法解析为变量

这对我来说是新的。有人愿意详细说明吗?

编辑2:

我现在已经解决了我的大部分问题,但是当我尝试运行该程序时,它并没有改变.txt文件中的X.我得到相同的输出,而我希望所有的X都变为0.我现在有了这个代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;


public class ReadMagicSquare {

    static int[][] matrix;
    int log10 = 0;
    String numberFormat;
    String line;
    int j = 0;
    int size = 0;

    public static String Replace(String filename) {
        try {
            Scanner file = new Scanner(new File(filename));
            System.out.println(file);
            StringBuilder b = new StringBuilder();
            String s = "";
            while(file.hasNextLine()){

                s = file.nextLine();


                if (s.equals("X")) {
                    s = "0";
                    b.append(s).append(System.getProperty("line.separator"));
                } else {
                    b.append(s).append(System.getProperty("line.separator"));
                }

                }
            try (PrintStream out = new PrintStream(new FileOutputStream("test1,1.txt"))) {
                out.print(b);
                out.close();
            } catch (IOException e) { 

            } 

        } catch (Exception e) {
            System.out.println("Problem reading file.");
        }
      return "bobby";
    }

    public ReadMagicSquare(String filename) {
        try {
            readFile("test1,1.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void readFile(String filename) throws IOException {

        BufferedReader buffer = new BufferedReader(new FileReader("test1,1.txt"));



        while ((line = buffer.readLine()) != null) {
            String[] vals = line.trim().split("\\s+");

            if (matrix == null) {
                size = vals.length;
                matrix = new int[size][size];
                log10 = (int) Math.floor(Math.log10(size * size)) + 1;
                numberFormat = String.format("%%%dd", log10);
            }

            for (int i = 0; i < size; i++) {
                matrix[j][i] = Integer.parseInt(vals[i]);
            }

            j++;
        }
    }

    public String toString() {
        StringBuffer buff = new StringBuffer();

        if (matrix != null) {
            for (int j = 0; j < size; j++) {
                buff.append(" ");
                for (int i = 0; i < size; i++) {
                    buff.append(String.format(numberFormat,  matrix[j][i]));

                }
                if (j < size - 1) {

                    buff.append("\n");
                } else {
                    buff.append("");
                }
            }
        }

        return buff.toString();
    }

    public static void main(String[] args) {
        Replace("test1.txt");
        ReadMagicSquare square = new ReadMagicSquare("square.txt");
        System.out.println(square.toString());
        System.out.println(matrix[3][0]);

    }
}

有谁知道导致问题的原因是什么?

3 个答案:

答案 0 :(得分:2)

  

我现在有out.print(b)的问题;线。它给了我错误:

     

b无法解析为变量

     

这对我来说是新的。有人愿意详细说明吗?

那是因为你无法访问catch块中try块内部声明的变量,只需在try块之前移动变量声明(你仍然可以在try块中初始化它)。

这是针对同一问题的另一个问题https://stackoverflow.com/a/2854153/1935341

答案 1 :(得分:1)

Replace中,您没有在所有情况下返回String(或null)

如果有异常或文件没有内容,则不返回任何值。

其次,您可能想要检查您应该何时返回的逻辑。目前,如果s == "X",您将返回。顺便说一句,这不是测试字符串相等性的正确方法。

答案 2 :(得分:1)

捕获异常时必须返回一些东西(String对象或null),或者向方法签名添加异常而不是捕获它。