亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何用一些分隔符拆分String而不在Java中刪除該分隔符?

如何用一些分隔符拆分String而不在Java中刪除該分隔符?

子衿沉夜 2019-12-13 10:25:35
我在拆分時面臨問題String。我想String用一些分隔符拆分a ,但又不丟失該分隔符。當我們somestring.split(String separator)在Java中使用method時,它會拆分,String但會從中刪除分隔符部分String。我不希望這種情況發生。我想要如下結果:String string1="Ram-sita-laxman";String seperator="-";string1.split(seperator);輸出:[Ram, sita, laxman]但我希望結果如下所示:[Ram, -sita, -laxman]有沒有辦法得到這樣的輸出?
查看完整描述

3 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

這有點狡猾,但是您可以使用replace函數引入虛擬分隔符。我不知道Java方法,但在C#中可能是這樣的:


string1.Replace("-", "#-").Split("#");

當然,您需要選擇一個虛擬分隔符,該分隔符保證不會出現在字符串中的任何其他位置。


查看完整回答
反對 回復 2019-12-13
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

string1.split("(?=-)");

之所以有效,split是因為實際上需要一個正則表達式。您實際上看到的是“零寬度正向超前”。


我想解釋更多,但我的女兒想參加茶話會。:)


編輯:回來!


為了解釋這一點,我將首先向您展示一個不同的split操作:


"Ram-sita-laxman".split("");

這會將您的字符串分割為每個零長度的字符串。每個字符之間都有一個零長度的字符串。因此,結果是:


["", "R", "a", "m", "-", "s", "i", "t", "a", "-", "l", "a", "x", "m", "a", "n"]

現在,我將我的正則表達式("")修改為僅匹配零長度的字符串(如果它們后接破折號)。


"Ram-sita-laxman".split("(?=-)");

["Ram", "-sita", "-laxman"]

在該示例中,?=意思是“超前”。更具體地說,這意味著“ 積極向前”。為什么要“積極”?因為您還可以使用負前瞻(?!),所以它將在每個零長度字符串(不帶破折號)上分割:


"Ram-sita-laxman".split("(?!-)");

["", "R", "a", "m-", "s", "i", "t", "a-", "l", "a", "x", "m", "a", "n"]

您還可以在()后面添加正向后視符號(lookbehind)(?<=),該符號將在每個零長度字符串(以短劃線開頭)處分割:


"Ram-sita-laxman".split("(?<=-)");

["Ram-", "sita-", "laxman"]

最后,您還可以在()后面加上負數lookbehind(?<!),以在每個不帶破折號的零長度字符串上進行分割:


"Ram-sita-laxman".split("(?<!-)");

["", "R", "a", "m", "-s", "i", "t", "a", "-l", "a", "x", "m", "a", "n"]

這四個表達式統稱為環視表達式。


獎勵:將它們放在一起

我只是想展示一個我最近遇到的示例,該示例結合了兩個環視表達式。假設您希望將一個CapitalCase標識符分成其令牌:


"MyAwesomeClass" => ["My", "Awesome", "Class"]

您可以使用以下正則表達式完成此操作:


"MyAwesomeClass".split("(?<=[a-z])(?=[A-Z])");

這會在每個零長度的字符串上分割,該字符串前面是小寫字母((?<=[a-z])),然后是大寫字母((?=[A-Z]))。


此技術還可以使用camelCase標識符。


查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 771 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號