首页 > 解决方案 > 为什么这个java方法不起作用?它应该消除字符串中的空格

问题描述

这是方法:

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());
    }
}

如果我搜索“数据”并且它不是文件的最后一个,它将给我一个无限的“空”输出

标签: javastringrandomaccessfile

解决方案


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

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


推荐阅读