[英]How do I signify any string or any set of characters in java?
我試圖檢查是否在我的ArrayList列表中已經有一個字符串,該字符串的前綴是文本閱讀循環中的當前字符串(行)。 我試着使用正則表達式,正如您在寫行+“ \\ w +”的行中所看到的那樣,該行表示當前字符串后跟1個或多個字符,但這似乎不起作用? 問題全都與效率有關,因此我無法使用嵌套的for循環來檢查數組列表中的每條前一行。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;
import java.util.regex.*;
public class Question1 {
/**
* @param r the reader to read from
* @param w the writer to write to
* @throws IOException
*/
public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
List<String> list = new ArrayList<>();
for (String line = r.readLine(); line != null; line = r.readLine()) {
if(list.size()>=1){
if(!list.contains(line+"\\w+")){
l.add(line);
}
} else {
l.add(line);
}
}
for(int i = 0; i < list.size();i++){
w.println(list.get(i));
}
}
列表中沒有通過正則表達式搜索的方法。 如果存在這樣的方法,那么它將具有線性復雜度,這在您的情況下是不可取的。
但是您可以使用TreeSet https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html 。 在樹中,項目按順序排列,默認情況下按自然順序排列。 字符串集的自然順序是按字典順序( https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo-java.lang.String- )。 這是您要從列表中排除字符串的順序。
我已經重寫了您的代碼。 我沒有使用IDE,所以如果代碼沒有構建,請不要嚴格。
public class Question1 {
public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
TreeSet<String> items = new TreeSet<>();
for (String line = r.readLine(); line != null; line = r.readLine()) {
// Add new line to set only if there no greater or equal string in set already
if(items.floor(line) == null){
items.add(line);
}
// Convert tree set to list
List<String> list = new ArrayList<>(items);
for(int i = 0; i < list.size();i++){
w.println(list.get(i));
}
}
}
此代碼的復雜度為O(n * log(N))。 它比原始代碼具有更好的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.