日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反引号包裹反引号_五个金色反引号

發布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反引号包裹反引号_五个金色反引号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反引號包裹反引號

五種琴弦

從Java 1.0開始,我們就有了字符串文字"like this" 。 我們還想要其他什么字符串? 其他編程語言為我們提供:

  • 表達式插值: s"I am ${age - 10} years old."
  • 插值格式: f"Price: $price%8.2f"
  • 具有在編譯時檢查的內部語法的字符串: r"[0-9]+([.,][0-9]*)?或xml"<a href='http://java.sun.com'>The Java home page</a>"
  • 不轉義反斜杠的原始字符串: raw"\.*"
  • 可以包含換行符的多行字符串: """ +-----+ | Cay | +-----+ """

在這里,我使用的語法讓人想起Scala進行演示。 其他語言則做出了不同的選擇。 例如,JavaScript使用反引號進行插值。

我最想在Java中擁有以下哪些功能? 對我而言,這將是編譯時語法檢查。 現在,IDE可以對特定的字符串(例如,正則表達式)進行有根據的猜測,并在格式錯誤時發出警告。 但是,如果它是編譯時錯誤,那就更好了。

當然,這是一個難題。 除了注釋處理,沒有其他機制可以在編譯時添加可插入檢查。 可以提供檢查字符串內容的注釋,而Checker Framework確實可以做到這一點。 但是您注釋變量,而不是字符串文字,因此不是同一回事。

如果有一種進行插值和格式化的標準方法,那也很好。 現在,我們有String.format和MessageFormat.format ,它們都是有用的但不兼容。

相反,Java 12為我們提供了原始/多行字符串。 那也很好

原始字符串

考慮例如使用正則表達式搜索句點。 正則表達式為\. 因為您必須在正則表達式中轉義一個句號。 因此在Java中,它是Pattern.compile("\\.") 。 要匹配反斜杠,它是Pattern.compile("\\\\") 。 這會變得很混亂。

實際上,它是如此令人困惑,以至于JEP 326的作者弄錯了它,或者也許具有微妙的幽默感。 作者的示例是Pattern.compile("\\\"")來匹配" 。 當然,您不需要在正則表達式中進行轉義,因此Pattern.compile("\"")可以正常工作,這證實了所有轉義都是一團糟。

解決方法很簡單。 將字符串括在反引號`...` 。 反引號內的所有內容都無需逃脫: Pattern.compile(`\.`)

但是,如果字符串包含反引號怎么辦?

在Scala和Kotlin中,使用"""分隔符,但這引出了問題。如果字符串包含"""怎么辦?

這是Java設計師提出我以前從未見過的一個聰明的主意。 您可以使用任意數量的反引號開始一個原始字符串,然后使用相同數量的反引號來結束它。 例如,如果您知道您的字符串中沒有五個連續的反引號,請執行以下操作:

String s = `````. . . . . . . . . . . .`````; // Five golden backticks :-)

字符串中的所有內容均照原樣進行。 如果它是某些HTML或SQL或您在其他地方開發的任何內容,則將其粘貼。

實際上,“原樣”是一個例外。 即使源文件使用Windows風格的\r\n行尾,所有行尾都被標準化為\n 。

美中不足的蒼蠅

Stephen Colebourne指出,兩個反引號可能會與空字符串混淆。 如果你有類似的東西

s = ``; t = ``;

那么就不會將s和t設置為空字符串,而是將s設置為字符串";\nt = " 。

那里有個很好的謎題。

原始字符串不能以反引號開頭或結尾。 例如,假設您要將以下Markdown片段放入Java字符串中:

<

pre>“`
警報(“ Hello,World!”)

</pre> You obviously can't add backticks at the start, so the best thing you can do is add a space or newline before the <code>```</code>. And the same holds for the end. Java requires that the ending delimiters exactly match the start. (In contrast, in Scala, you can write <code>"""Hello, "World""""</code>, and the compiler figures out that one of the terminal quotation marks belongs to the string.)So, you can write: <pre>String markdown = `````

警報(“ Hello,World!”)

“”`.strip();

strip會在開頭和結尾刪除\n 。 或者,也可以將換行符留在原處,如果它們無關緊要。

( strip方法是Java 11的新功能。它與trim相似,但是它去除了開頭和結尾的Unicode空白,而trim刪除了≤32的字符,這已經不一樣了。這些天,您應該使用strip ,而不是trim 。)

IDE支持

激活JDK 12的實驗功能時,IntelliJ 2018.3可以將帶有反斜杠的字符串轉換為原始字符串。(有關詳細信息,請參閱此博客文章 。)

我嘗試轉換老式的多行字符串:

private static final String authorPublisherQuery = "SELECT Books.Price, Books.Title\n"+ " FROM Books, BooksAuthors, Authors, Publishers\n"+ " WHERE Authors.Author_Id = BooksAuthors.Author_Id AND BooksAuthors.ISBN = Books.ISBN\n"+ " AND Books.Publisher_Id = Publishers.Publisher_Id AND Authors.Name = ?\n"+ " AND Publishers.Name = ?\n";

那是行不通的,但是沒有理由為什么將來不會。

壓痕管理

我更喜歡在最左邊的列上排列多行字符串。 例如,

public static void main(String[] args) {String myNameInABox = ` +-----+ | Cay | +-----+`.strip(); System.out.print(myNameInABox);}

它使多行字符串從Java代碼中脫穎而出。 它為您放入原始字符串中的所有內容提供了足夠的水平空間。

但是,很多人似乎更喜歡將多行字符串的內容與Java代碼對齊的樣式:

...String myNameInABox = `+-----+| Cay |+-----+`.align();System.out.print(myNameInABox);

align方法(在Java 12中定義)刪除空格的公共前綴以及空白行的開頭和結尾。

這種方法存在風險。 如果混合使用制表符和空格,則每個制表符都計為一個空格。 在您的IDE中,有些東西看起來與您對齊,但與align方法不一致。 當然,您的IDE可能會警告您這種情況。 IntelliJ 2018.3當前不這樣做。

未走的路

關于新功能的許多討論都在“ Amber Spec”郵件列表中進行,您可以在http://mail.openjdk.java.net/pipermail/amber-spec-observers/上進行觀察,因此您可以查看具有哪些替代方法被考慮。

關于是否應該自動刪除縮進進行了激烈的討論。 可以預見,這最終沒有被采納。

原始字符串中的Unicode轉義如何處理? \u0060應該是反引號嗎? 理智盛行,因此決定“原始意味著原始”。

是否應該將兩個反引號定為非法,因為``可能與空字符串混淆? 不可以,只有一個簡單的規則,即“任何一方都有任意數量的反引號”,這一點被認為更為重要。

在開始反引號之后換行怎么樣? 關于是否應該將其剝離存在一些問題。 我仍然感到遺憾的是,沒有對此問題給予更多關注。 將換行符包含在開頭的定界符中將解決兩個問題:初始反引號和最左列的對齊。

我膽怯地問,為什么關閉分隔符不能是“至少與打開分隔符一樣多的反引號”(類似于Scala),以便原始字符串可以以反引號結尾。 不幸的是,我沒有任何回應。

令人驚訝的是,像這樣的概念上簡單的功能有多少細節。 撇開小調,這是一個非常受歡迎的禮物,正好趕上假期。

翻譯自: https://www.javacodegeeks.com/2018/12/five-golden-backticks.html

反引號包裹反引號

總結

以上是生活随笔為你收集整理的反引号包裹反引号_五个金色反引号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 污污网址在线观看 | 最新中文字幕av专区 | 全肉的吸乳文 | 日本在线播放一区 | 一本色道久久88加勒比—综合 | 91福利网址 | 国产又粗又猛视频免费 | 久久香蕉网站 | 成人性生生活性生交全黄 | 日韩在线视频免费观看 | 国产一区二区三区在线观看 | 亚洲裸体网站 | 精品动漫3d一区二区三区免费版 | 成人网在线观看 | 青青青视频免费观看 | 一级片免费在线 | 在线观看黄色片网站 | 久操视频在线 | 日本xxxxxxxxx18 | 91蜜桃视频在线观看 | 精品小视频在线观看 | 初尝人妻少妇中文字幕 | 全部免费毛片在线播放 | 成人tv| 国产原创在线视频 | 欧美日韩精品久久久 | 东京干手机福利视频 | 黄色一级在线观看 | 亚洲经典一区二区三区 | 国产美女作爱视频 | 男生捅女生肌肌 | 亚洲91在线| 在线免费视频一区二区 | 中国av一级片 | 久久99久久久久 | 91色综合| 91欧美在线 | 毛片9| 日本一二三不卡 | 性生活三级视频 | 中国精品毛片 | 男女国产视频 | 成人黄色在线播放 | gogo人体做爰大胆视频 | 欧美亚洲影院 | 人妻无码久久一区二区三区免费 | 免费无码av片在线观看 | 欧美色综合网站 | 91av在 | 艳妇av| 美女在线网站 | 日韩特级片 | 亚洲va天堂va国产va久 | 久久精品视频免费 | 在线观看精品视频 | 婷婷六月天在线 | 黑人操亚洲人 | 强制憋尿play黄文尿奴 | 亚洲性欧美色 | 欧美激情日韩 | 久久久久久久久久久久久女过产乱 | 欧美日韩中文字幕一区二区 | 色女仆影院| 99精品欧美一区二区 | 欧美日本韩国一区二区三区 | 成人av资源站 | 精品一区二区不卡 | 黄色裸体视频 | 欧美寡妇性猛交ⅹxxx | 在线免费观看污片 | 99re视频在线观看 | 一个色的综合 | 亚洲综合一区二区三区 | 天天av天天爽| 一本久道在线 | av高清一区 | 九九久久国产 | 超碰97在线看| 青草在线视频 | 日韩有码一区 | 亚洲欧美另类日本 | 狠狠躁天天躁夜夜躁婷婷 | 男生尿隔着内裤呲出来视频 | 久久精品国产一区 | 欧美一区二区三区四区五区六区 | 中文字幕一区二区三区在线视频 | 一区二区高清 | 狠狠爱综合网 | 亚洲欲色 | eeuss国产一区二区三区黑人 | 亚洲成年人专区 | 中文字幕一区二区三区在线不卡 | 日韩精品一卡二卡 | 日韩精品视频免费在线观看 | 性感美女视频一二三 | 2019中文字幕在线观看 | 公车激情云雨小说 | 日本视频免费在线 | 久久黄色免费视频 |