如果有些信息被认为缺乏知识,那么很抱歉,刚刚开始学习Java。
在这个工作中,用户搜索道路和城镇。问题是,当搜索类似于“Cabramatta”的结果时,结果“Cabramatta West”也会出现在结果中。
正在阅读的信息格式如下:
威廉街^3^3503^柯林斯街
威廉街^3^3503^柯林斯街
while(fileName.hasNext())
{
String line =fileName.nextLine();
{
if(line.contains(suburbInput) && line.contains(roadInput))
{
String tramDetails[] = line.split("\\^");
String crossStreet = tramDetails[0];
String stopNumber = tramDetails[1];
int stopNumberInt = Integer.parseInt(stopNumber);
String trackerID = tramDetails[2];
int trackerIDInt = Integer.parseInt(trackerID);
String roadName = tramDetails[3];
String suburbName = tramDetails[4];
System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");我怎样才能在搜索时找到“Cabramatta”的结果,但在搜索“Cabramatta West”时也能找到结果呢?
发布于 2017-08-22 18:45:17
在检查之前,您必须拆分您的输入,以便可以使用.equals而不是.contains。
while(fileName.hasNext())
{
String line =fileName.nextLine();
String tramDetails[] = line.split("\\^");
String suburbName = tramDetails[4];
String roadName = tramDetails[3];
if(suburbName.equals(suburbInput) && roadName.equals(roadInput))
{
String crossStreet = tramDetails[0];
String stopNumber = tramDetails[1];
int stopNumberInt = Integer.parseInt(stopNumber);
String trackerID = tramDetails[2];
int trackerIDInt = Integer.parseInt(trackerID);
System.out.print("'Suburb': " + suburbName
+ " 'Road': " + roadName
+ " 'Cross Street': " + crossStreet
+ " 'Stop': " + stopNumberInt
+ " 'Tracker ID': " + trackerIDInt + "\n");
}发布于 2017-08-22 18:43:44
先拆分,然后只使用equals方法的String。下面是一个测试代码:
String line = "William Street^3^3503^Collins Street^Cabramatta West";
String suburbInput = "Cabramatta";
String roadInput = "Collins Street";
String tramDetails[] = line.split("\\^");
String crossStreet = tramDetails[0];
String stopNumber = tramDetails[1];
int stopNumberInt = Integer.parseInt(stopNumber);
String trackerID = tramDetails[2];
int trackerIDInt = Integer.parseInt(trackerID);
String roadName = tramDetails[3];
String suburbName = tramDetails[4];
if (suburbInput.equals(suburbName) && roadInput.equals(roadName))
System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet
+ " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");
suburbInput = "Cabramatta West";
if (suburbInput.equals(suburbName) && roadInput.equals(roadName))
System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet
+ " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n");和产出:
'Suburb': Cabramatta West 'Road': Collins Street 'Cross Street': William Street 'Stop': 3 'Tracker ID': 3503希望这能有所帮助!
发布于 2017-08-22 18:44:25
您可以在郊区使用String#endsWith()而不是String#contains():
if (line.endsWith(suburbInput) && line.contains(roadInput))当然,这只是个创可贴。'Cabramatta‘仍将与'West’匹配。问题是,随着if (...)语句的实现,只能找到可能的匹配。您需要将行解析为要匹配的确切字段,然后显式地测试这些字段。
或者(大锤方法),您可以实现一个正则表达式匹配器,它将在一次执行中完全匹配所有内容。
https://stackoverflow.com/questions/45824608
复制相似问题