为什么这个java方法不起作用?它应该消除字符串

时间:2018-04-26 20:13:51

标签: java string randomaccessfile

这里是方法:

public static String normalizza(String x) {

    for (int i = x.length(); i > 0; i--) {
        if (x.substring(i, x.length()).equalsIgnoreCase(" ")) {
            x = x.substring(0, i);
        }
    }

    return x;
}

我应该从随机访问文件中读取一个字符串,并消除空格以找到对象位置

这些是该类的属性:

public class Iscritto {
private int id;
private String nome;
private String cognome;
private String dataNascita;

这是属性" nome"的搜索方法。 (方法" normalizza"适用于此方法):

private static void cercaNome() {
    Iscritto a = new Iscritto();
    try {
        File file = new File("C:\\temp\\iscritti.dat");
        RandomAccessFile ra = new RandomAccessFile(file, "r");
        String nome = JOptionPane.showInputDialog("Inserisci nome da cercare:");
        ra.seek(0);
        a.leggi(ra);
        String nomeControllato = a.getNome();
        nomeControllato = normalizza(nomeControllato);
        int conta = 0;

        if (nomeControllato.equalsIgnoreCase(nome)) {
            int b = (int) ra.getFilePointer() - 2;
            int position = b / 153;
            ra.seek(position * 153);
            a.leggi(ra);
            System.out.println("iscritto:   " + a);
        } else {
            while (!nomeControllato.equalsIgnoreCase(nome)) {
                conta++;
                ra.seek(conta * 153);
                a.leggi(ra);
                nomeControllato = a.getNome();
                nomeControllato = normalizza(nomeControllato);

                if (nomeControllato.equalsIgnoreCase(nome)) {
                    int b = (int) ra.getFilePointer() - 2;
                    int position = b / 153;
                    ra.seek(position * 153);
                    a.leggi(ra);
                    System.out.println("iscritto:   " + a);
                }

            }
        }
        ra.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

这是属性"数据"的搜索方法。 (normalizza不适合这个):

private static void cercaData() {
    Iscritto a = new Iscritto();
    try {
        File file = new File("C:\\temp\\iscritti.dat");
        RandomAccessFile ra = new RandomAccessFile(file, "r");
        String data = JOptionPane.showInputDialog("Inserisci data da cercare (example : 12-MAG-2018):");
        ra.seek(0);
        a.leggi(ra);
        String dataControllata = a.getDataNascita();
        dataControllata = normalizza(dataControllata);
        int conta = 0;

        if (dataControllata.equalsIgnoreCase(data)) {
            int b = (int) ra.getFilePointer() - 2;
            int position = b / 153;
            ra.seek(position * 153);
            a.leggi(ra);
            System.out.println("iscritto:   " + a);
        } else {
            while (!dataControllata.equalsIgnoreCase(data)) {
                conta++;
                ra.seek(conta * 153);
                a.leggi(ra);
                dataControllata = a.getDataNascita();
                dataControllata = normalizza(dataControllata);

                if (dataControllata.equalsIgnoreCase(data)) {
                    int b = (int) ra.getFilePointer() - 2;
                    int position = b / 153;
                    ra.seek(position * 153);
                    a.leggi(ra);
                    System.out.println("iscritto:   " + a);
                }

            }
        }
        ra.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

if i search a "data" and it's not the last of the file it will give me an infinite "null" output

2 个答案:

答案 0 :(得分:0)

如果要消除String末尾的空格,只需使用trim()方法。

System.out.println(" my String  ".trim()); // prints 'my String'

如果您需要消除字符串中的所有空格,请使用replace(String, String)

System.out.println(" my String  ".replace(" ", "")); // prints 'myString'

答案 1 :(得分:0)

假设你有理由不使用String.trim(),你可以做一个更简单的实现:

从字符串的结尾开始,向后看每个.charAt(i)直到!=''。然后只子串一次,在非空间字符之后切割。