java - 为什么这个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());
}
}
解决方案
假设你有理由不使用 String.trim(),你可以做一个更简单的实现:
i 从字符串的末尾开始,然后向后看每个 .charAt(i) 直到 != ' '。然后子串一次,在那个非空格字符之后切割。
推荐阅读
- firebase - React-Native 中的 FireStore
- powershell - 为什么我的别名不给我 get-help 或 -?
- git - LockedFileException:无法锁定文件 config.lock 以进行写入
- c# - C# 中带有 SIMD 的 2x2 矩阵向量积
- node.js - 如何使用 mongoose 将数据更新到 mongodb
- sql - 按从最高购买频率到最低频率的顺序验证每个客户的给定排名。?
- python - 我正在浏览一个 django 教程,我被困在一个地方。我的错误是 OperationalError at / no such table: django_session
- swift - FirebaseAuth with Swift 不起作用(显示一个空白的 Welcome VC)
- python - 改进 Stockfish 计算以生成可能的最佳移动
- c++ - 如何在 SublimeText3 中自动制作 C++ 控制台?