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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java很長(zhǎng)的字符串比較似乎不起作用

Java很長(zhǎng)的字符串比較似乎不起作用

紫衣仙女 2022-07-27 11:14:53
更新:使用您在檢查字符串之間的建議,我發(fā)現(xiàn)不同之處在于某些字段的排列,因?yàn)檫@些字符串實(shí)際上是 JSON 字符串。示例: string1 上的字段username: johndoe@dummy.com位于開頭,但位于 string2 的中間某處。我想知道是否有一種方法可以檢查或比較 2 個(gè) json 對(duì)象,而不管它們的字段/屬性的排列如何……只要它們的內(nèi)容(字段值)相同。我嘗試了什么:private boolean sameJsonObject(Object o1, Object o2) throws IOException {    if (o1 == null || o2 == null) {        return false;    }    JsonNode json1 = mapper.readTree(mapper.writeValueAsString(o1));    JsonNode json2 = mapper.readTree(mapper.writeValueAsString(o2));    return json1.equals(json2);}這行得通,但我相信這可以改進(jìn)。原始問題:我想檢查兩個(gè)字符串是否相等,但是這些字符串真的很長(zhǎng),不能設(shè)置為變量/字符串對(duì)象,并且字符串常量太長(zhǎng)。我知道有equals(), equalsIgnoreCase(),StringUtils.equals(s1, s2)但這些似乎都不起作用。我正在比較的字符串來自兩個(gè)不同的來源,并且手動(dòng)比較它會(huì)得到相同的結(jié)果(我的意思是內(nèi)容相同)。我試圖在這里發(fā)布示例字符串,但我不能。要比較的每個(gè)字符串的大小超過 30k(每個(gè)字符串 170k)。順便說一句,這些字符串是實(shí)際數(shù)據(jù)(json),它們真的很大,我想測(cè)試它的相等性(內(nèi)容)。有沒有辦法在java中進(jìn)行檢查?
查看完整描述

3 回答

?
桃花長(zhǎng)相依

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊

簡(jiǎn)單的答案是:逐個(gè)字符比較兩個(gè)字符串。

換句話說:很可能,內(nèi)置的 Java 字符串比較方法是正確的,導(dǎo)致:您的輸入字符串不相等。相等的字符串極不可能導(dǎo)致equals()給出錯(cuò)誤。

因此,合理的第一個(gè)選擇是:更改您的比較代碼,使其:

  • 逐個(gè)字符地迭代第一個(gè)字符串

  • 從第二個(gè)字符串中獲取對(duì)應(yīng)的字符

  • 比較那些(“完整”等于或忽略大小寫)

  • 關(guān)于不匹配:打印出索引和兩個(gè)不同的字符(您確保打印一些東西,例如"<" + thatChar + ">"只是為了確保不可打印的字符,或者可能使用 Character.getNumericValue())

所以,這里的答案基本上是讓自己能夠進(jìn)行適當(dāng)?shù)恼{(diào)試。


查看完整回答
反對(duì) 回復(fù) 2022-07-27
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

順便說一句,這些字符串是實(shí)際數(shù)據(jù)(json),它們真的很大,我想測(cè)試它的相等性(內(nèi)容)。


如果這些是 JSON 數(shù)據(jù),請(qǐng)不要將它們與 String 進(jìn)行比較。

使用 JSON 庫(kù)(Jackson、GSON 或任何東西)來表示這些數(shù)據(jù)并比較它們(equals()通常被覆蓋)。它會(huì)通過考慮或忽略空格、節(jié)點(diǎn)順序等內(nèi)容來更清晰、更具體地比較它們。 . 你可以在這里找到一些例子。


您可以更特別地考慮 SkyScreamer 庫(kù),它提供多種風(fēng)格來比較 JSON。例如這個(gè)JSONAssert.assertEquals()重載:


public static void assertEquals(org.json.JSONArray expected,

                                org.json.JSONArray actual,

                                JSONCompareMode compareMode)

                         throws org.json.JSONException

您可以在其中指定一個(gè)JSONCompareMode對(duì)象,例如 JSONCompareMode.LENIENT.


查看完整回答
反對(duì) 回復(fù) 2022-07-27
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

170k 對(duì)于字符串來說并不算大,盡管對(duì)于源代碼中的字符串文字來說它很大。

從包含它們的文件中加載您的兩個(gè)字符串,并使用 equals 以正常方式進(jìn)行比較。

您提到字符串不是文本而是 JSON。在大多數(shù)情況下,您需要規(guī)范化您的 json(使空格、屬性順序和標(biāo)點(diǎn)符號(hào)相同)。


查看完整回答
反對(duì) 回復(fù) 2022-07-27
  • 3 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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