第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 按所需字符串排序

Java 按所需字符串排序

白衣非少年 2023-08-09 15:45:11
我對比較器的想法很陌生,我正在研究對字符串進行排序的方法。在下面的代碼中,我創(chuàng)建了一個列表并使用該Collections.sort()方法對其進行排序。這是代碼:public class ComparatorTest {    /**     * @param args the command line arguments     */    public static void main(String[] args) {        // TODO code application logic here        List<String> list = new ArrayList<String>();        list.addAll(Arrays.asList("Bob Stone", "Jordan Brand", "Bob Mass", "Dylan Walsh","Tom Mavis","Bob Ganley"));        System.out.println("Before sort "+ list);        Collections.sort(list);        System.out.println("After sort "+ list);    }}如何修改它以使用給定的字符串進行排序,而不是僅按字母順序排序?例如,如果我給出字符串BOB,那么所有 BOB 將移動到列表的前面。我之前確實問過一個排序問題,但我誤解了排序的想法,它更像是一個過濾問題(java按照用戶輸入的字符串值對字符串列表進行排序)。這個問題與我之前的問題不同,因為現(xiàn)在我試圖對字符串進行實際排序和重新排列,而不是過濾它們。
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

您可以使用該Boolean.compare方法檢查字符串是否以“Bob”開頭:

Comparator<String> bobsFirst = (a, b) -> Boolean.compare(b.startsWith("Bob"), a.startsWith("Bob"));

以這種方式比較它們(先 b,然后 a),首先以“Bob”開頭。

然后,使用自然順序進行平局:

Comparator<String> comparator = bobsFirst.thenComparing(a -> a);

請注意,startsWith區(qū)分大小寫。要忽略“Bob”的大小寫,您可以將b.startsWith("Bob")(與 類似a)替換為:

 b.regionMatches(true, 0, "Bob", 0, 3)


查看完整回答
反對 回復(fù) 2023-08-09
?
回首憶惘然

TA貢獻1847條經(jīng)驗 獲得超11個贊

Collator班級

用于比較和排序自然語言(人類語言)的規(guī)則正式稱為排序規(guī)則

在Java中,任何排序規(guī)則都是在類實現(xiàn)Collator類中定義的。通常,它的子類RulesBasedCollator用于比較/排序。該類CollatorProvider是一個SPI(服務(wù)提供者接口),用于提供注冊的Collator實現(xiàn)。最近版本的 Java 默認使用Unicode Consortium在其公共區(qū)域設(shè)置數(shù)據(jù)存儲庫 (CLDR)中提供的排序規(guī)則定義。

Collator據(jù)推測,您可以根據(jù)自己的需要自由地構(gòu)建自己的實現(xiàn),并使用此類特殊規(guī)則。

請注意,校對是一個非常復(fù)雜的領(lǐng)域,其規(guī)則因人類語言和文化規(guī)范而異。如果您只關(guān)心美式英語,那么您可能不會遇到什么問題。但如果您處理其他語言、文化或替代字符(例如?或 表情符號),那么,這里就是龍。


查看完整回答
反對 回復(fù) 2023-08-09
?
犯罪嫌疑人X

TA貢獻2080條經(jīng)驗 獲得超4個贊

您需要做的第一件事是了解規(guī)則,例如,當(dāng)出現(xiàn)以下情況時會發(fā)生什么:

  • 左邊和右邊都以“Bob”開頭?

  • 當(dāng)左側(cè)和右側(cè)都不以“Bob”開頭時會發(fā)生什么?

  • 您關(guān)心匹配案例嗎?

  • 您只關(guān)心名字還是應(yīng)該包含姓氏或者您希望它是可配置的?

一個簡單的實現(xiàn)可能看起來像......

public class NameComparator implements Comparator<String> {


    private String name;


    public NameComparator(String name) {

        this.name = name;

    }


    @Override

    public int compare(String lhs, String rhs) {

        if (lhs.startsWith(name) && rhs.startsWith(name)) {

            return lhs.compareTo(rhs);

        } else if (lhs.startsWith(name)) {

            return -1;

        } else if (lhs.startsWith(name)) {

            return 1;

        }


        return lhs.compareTo(rhs);

    }

}

現(xiàn)在,這會進行大小寫匹配(因此bob與 不同Bob),并將對自己組內(nèi)的所有“Bobs”進行子排序


正如您所看到的,五秒鐘的思考已經(jīng)提出了許多可能的方法來對列表進行排序,因此您需要了解您的選項,您可能希望自定義哪些選項以及您想要修復(fù)哪些選項。


您可以使用類似...的方式調(diào)用此示例


Collections.sort(list, new NameComparator("Bob"));

這將根據(jù)您可用的輸入、輸出...


Before sort [Bob Stone, Jordan Brand, Bob Mass, Dylan Walsh, Tom Mavis, Bob Ganley]

After sort [Bob Ganley, Bob Mass, Bob Stone, Dylan Walsh, Jordan Brand, Tom Mavis]


查看完整回答
反對 回復(fù) 2023-08-09
  • 3 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號