2016-09-11 81 views
-1
AssertThat(myString1 , is (myString2)); 

失敗。如何將字符串轉換爲具有 n而不是換行符

所以我通過eclipse調試「變量」控制檯檢查了兩個值。

myString1

hello 
my name is 
alex 

myString2

hello\n my name is\n alex 

如果我String.compareTo嘗試,失敗了。

我的問題是兩個, 1.那些實際上是相同的嗎? (控制檯顯示)? 2.如果不是,我該如何從myString1轉換到myString2?

+0

似乎在'myString2'的第一個'\ n'和'my'之間還有一個額外的空間。 – QBrute

+0

謝謝大家的提示。我很困惑,因爲當我檢查一個日誌文件時,「myString1」只是表示myString2表單。爲了解決我的問題,我簡單地使用了escapeJava。 – user1289238

回答

2

使用此import-- org.apache.commons.lang.StringEscapeUtils

StringEscapeUtils.escapeJava(StringVariableNameHere); 

將作爲一個提示你的問題

0

1)沒有,他們顯然不一樣的。

2)這個怎麼樣:

myString2 = myString1.replaceAll("\\n", "\\\\n"); 

或更好:

myString2 = myString1.replaceAll(System.getProperty("line.separator", "\\\\n"); 

無需使用外部包。

0

最關鍵的事情在這裏明白的是:我們可以告訴你您的要求

確實很簡單:兩個字符串對象只有只有等於,如果a.equals(b)返回true。所以,顯然,你的例子中的兩個字符串是而不是等於。

但是背後的問題是:它對你的生產代碼有影響嗎?因此:你的測試代碼應該如何處理它?

含義:生產和測試代碼的所有者,有,如果你關心那些換行符理解。可能有很多選項來解決您的失敗測試:

  1. 爲什麼一個字符串中有\ n字符;另一個沒有?你的expected value簡直是錯的嗎?或者你的期望值真的是「正確」的;因此:生產代碼給出了意外的結果;從而表明您的生產代碼中存在問題?

所以,是的,正確的答案可能是按摩該斷言(或其預期值)以允許這樣的\ n字符。但正確的答案也可以是「修復破壞的生產代碼」。正如你正在使用斷言那樣,你可能會編寫自己的匹配器,以某種方式忽略\ n字符;這將給你的例子字符串「真」...

如說:有幾個選項來「解決」這個;但必須明白哪一個確實修復了你的問題。

相關問題