字符串不想用C写了,这题又WA了好久,最后的思路还是少考虑了一种情况,冥想了半天,以后一定把想到的各种情况都写到代码里,不能想当然,越严谨越好
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int count = 0;
while (true)
{
String line = sc.nextLine();
count++;
if (count != 1)
System.out.println();
int n = Integer.parseInt(line);
String[] files = new String[n];
for (int i = 0; i < n; i++)
files[i] = sc.nextLine().trim();
int m = Integer.parseInt(sc.nextLine());
String[] queries = new String[m];
for (int i = 0; i < m; i++)
{
queries[i] = sc.nextLine().trim();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n; j++)
if (match(files[j], queries[i]))
sb.append(", ").append(files[j]);
if (sb.length() > 0)
System.out.println(sb.substring(2));
else
System.out.println("FILE NOT FOUND");
}
if (sc.hasNext())
sc.nextLine();
else
break;
}
}
static boolean match(String s, String query)
{
if (query.indexOf('*') == -1)
return s.equals(query);
int index = query.indexOf('*');
String head = query.substring(0, index);
String tail = query.substring(index + 1);
int h = head.length();
int t = tail.length();
int i1 = s.indexOf(head);
int i2 = s.lastIndexOf(tail);
if (h != 0 && t != 0)
{
if (i1 == 0 && i2 + t == s.length() && h + t <= s.length())
return true;
return false;
}
else if (h != 0)
return i1 == 0;
else if (t != 0)
return i2 != -1 && i2 + t == s.length(); //之前没有加i2!=-1,想当然了,以为后面那个条件就够了,天真啊,WA的半死
else
return true;
}
}