在 Java 中打印字符串周圍的“”引號
一、概述
Hello World!
” 可能是我們開始學習 Java 時看到的第一個 Java 示例。我們知道如果我們將一個String
對像傳遞給System.out.println()
方法,Java 會在控制台中輸出該字符串。
但是,有時,我們希望在輸出中將字符串用引號 ( ” … “
) 括起來。在本快速教程中,我們將探討如何實現這一目標。
2. 用兩個轉義引號字符串包裝
如果我們想用引號 ( “…”
) 包裹一個字符串,最直接的想法是將引號連接到給定文本的開頭和結尾。
在 Java 中,當我們使用字符串值時,我們必須引用它,例如System.out.println(“Hello World!”);.
但是,我們不能在像“””.
Java 不接受它。因此,在這種情況下,我們必須對字符串中的引號進行轉義: “\””.
接下來,讓我們用一個輸入示例來嘗試一下:
String theySay = "All Java programmers are cute!";
String quoted = "\"" + theySay + "\"";
System.out.print(quoted);
當我們運行上面的程序時,我們可以看到帶引號的輸出:
"All Java programmers are cute!"
3. 在單元測試中驗證輸出
通常,我們構建單元測試來驗證方法是否按預期工作。但是,這種情況有點特殊,因為我們需要驗證打印到控制台的輸出。為了驗證輸出,我們可以將System.out
替換為另一個使用ByteArrayOutputStream
作為OutputStream
PrintStream
對象:
final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
final PrintStream originalOut = System.out;
@BeforeEach
void replaceOut() {
System.setOut(new PrintStream(outContent));
}
@AfterEach
void restoreOut() {
System.setOut(originalOut);
}
@BeforeEach
和@AfterEach
是來自 JUnit 5 的兩個註釋。註釋的方法將在每個測試方法執行之前和之後被調用。
現在,如果我們將原始輸出代碼放在測試方法中,我們可以驗證打印輸出:
String theySay = "All Java programmers are cute!";
String quoted = "\"" + theySay + "\"";
System.out.println(quoted);
//assertion
String expected = "\"All Java programmers are cute!\"\n";
assertEquals(expected, outContent.toString());
如果我們試一試,測試就會通過。因此,為簡單起見,在後面的示例中,我們將使用單元測試斷言來驗證System.out.
4. 使用replaceAll()
方法
標準的String.replaceAll()
方法可以通過正則表達式進行字符串替換操作。我們通過將引號連接到輸入字符串的開頭和結尾來解決了這個問題。
按照同樣的思路,我們可以使用replaceAll()
方法來實現它:
String theyAsk = "Can you write Java code?";
String quoted = theyAsk.replaceAll("^|$","\"" );
System.out.println(quoted);
//assertion
String expected = "\"Can you write Java code?\"\n";
assertEquals(expected, outContent.toString());
上面的示例顯示正則表達式“^|$”
匹配輸入字符串的開頭和結尾。因此, replaceAll()
方法用引號替換匹配項。
5. 用兩個引號換行
到目前為止,我們已經學習了兩種打印用引號括起來的字符串的方法。這兩種方法都轉義字符串中的引號字符,如“\””
。它正確地完成了工作。但是,使用轉義字符會使代碼更難閱讀和理解。
為了避免轉義引號字符,我們可以使用char
而不是 string :
String weSay = "Yes, we can write beautiful Java codes!";
String quoted = '"' + weSay + '"';
System.out.println(quoted);
//assertion
String expected = "\"Yes, we can write beautiful Java codes!\"\n";
assertEquals(expected, outContent.toString());
如果我們運行測試,它就會通過。如上測試所示,我們對兩個chars
和一個String:
'”' + weSay + '”'
。這樣做是因為Java 自動將char
轉換為String
,然後將其與字符串**weSay** .
因此,不需要轉義。
六,結論
在本文中,我們探索了三種不同的方法來打印帶有引號 ( “
) 的字符串:
-
“\”” + input + “\””
– 在輸入字符串的開頭和結尾添加轉義引號字符串 (“\””
) -
input.replaceAll(“^|$”, “\””)
– 使用基於正則表達式的replaceAll()
方法 -
'”' + input + '”'
– 類似於第一個解決方案,但使用char
而不是String
以避免轉義
除此之外,我們還學習瞭如何在單元測試中驗證System.out.println()
編寫的輸出。
與往常一樣,此處提供的所有代碼片段都可以在 GitHub 上找到。