почему этот метод Java не работает? это должно устранить пустые места в строках - PullRequest
0 голосов
/ 26 апреля 2018

вот метод:

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

это метод поиска для атрибута "данные" (нормальная пицца для этого не работает):

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

если я ищу «данные» и это не последний файл, это даст мне бесконечный «нулевой» вывод

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если у вас есть причина не использовать String.trim (), вы можете сделать намного более простую реализацию:

начинайте i с конца строки и смотрите назад на каждый .charAt (i) до! = ''. Затем подстрока только один раз, обрезка после этого непробельного символа.

0 голосов
/ 26 апреля 2018

Если вы хотите удалить пустые пробелы в конце вашей строки, просто используйте метод trim().

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

Если вам нужно устранить все пробелы в строке, используйте replace(String, String)

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