簡體   English   中英

如何在Java中表示任何字符串或任何字符集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM