[英]Java Substring from multiline string
我有一個要求編輯字符串並顯示
輸入字符串:
邀請 URL: www.someurl.com id:12345678 dial:+98765432 code:0192837465 AccessCode:12345 密碼:abc
這里有一些線
我不想顯示最后 3 行,
我試圖搜索空行的索引並將 substring 從索引 0 獲取到空行索引
int index = mystring.indexof(("\\r\\n"));
mystring.substring(0,index)
但是索引總是返回-1。 我的疑問是如何找到空字符串的索引。
我想要來自 InviteURL 的 substring 直到 AccessCode 或 Password(AccessCode 和 Password 都將存在或僅 AccessCode 將存在),之后我必須跳過任何其他附加行
Output 預期:
邀請 URL: www.someurl.com id:12345678
撥號:+98765432
代碼:0192837465
密碼:abc
public static void main(String[] args) {
String myString = "URL: www.someurl.com\n" +
"id:12345678\n" +
"dial:+98765432\n" +
"code:0192837465\n" +
"password:abc\n" +
"\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
"some line here\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
String[] split = myString.split("\\n\\n");
System.out.println(split[0]);
}
有很多方法可以做到這一點,但最簡單的方法很可能是:
String inputString ="URL: www.someurl.com\n" +
"id:12345678\n" +
"dial:+98765432\n" +
"code:0192837465\n" +
"password:abc\n" +
"\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
"some line here\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
if (inputString.contains("\r\n")) {
inputString = inputString.substring(0, inputString.indexOf("\r\n\r\n")).trim();
}
else {
inputString = inputString.substring(0, inputString.indexOf("\n\n")).trim();
}
System.out.println(inputString);
另一種簡單的方法是:
String inputString ="URL: www.someurl.com\n" +
"id:12345678\n" +
"dial:+98765432\n" +
"code:0192837465\n" +
"password:abc\n" +
"\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
"some line here\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
String[] stringParts = inputString.split("\n\n|\r\n\r\n");
inputString = stringParts[0];
System.out.println(inputString)
另一種實現方式是利用掃描儀 class:
String inputString ="URL: www.someurl.com\n" +
"id:12345678\n" +
"dial:+98765432\n" +
"code:0192837465\n" +
"password:abc\n" +
"\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
"some line here\n" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
StringBuilder sb = new StringBuilder();
Scanner scan = new Scanner(inputString);
String line;
while (scan.hasNextLine()) {
line = scan.nextLine();
if (line.equals("")) {
break;
}
sb.append(line).append(System.lineSeparator());
}
inputString = sb.toString().trim();
System.out.println(inputString);
如果您想使用正則表達式(RegEx) 以及作為java.util.regex package 一部分的模式/匹配器類,那么您可以試試這個:
String inputString = "URL: www.someurl.com\n"
+ "id:12345678\n"
+ "dial:+98765432\n"
+ "code:0192837465\n"
+ "password:abc\n"
+ "\n"
+ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
+ "some line here\n"
+ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
Pattern pattern = Pattern.compile("(.*?\n{2}[\r]?)", Pattern.DOTALL);
Matcher m = pattern.matcher(inputString);
String newString = "";
if (m.find()) {
newString = (m.group().trim());
}
System.out.println(newString);
這個正則表達式是什么? - "(.*?\n{2}[\r]?)"
(
: Capturing Group #1 (start) - 將多個令牌組合在一起並創建一個捕獲組,用於提取 substring 或使用反向引用。這是指示組開始的左括號。.
: Dot - 匹配除換行符以外的任何字符。*
:量詞- 匹配 0 個或多個前面的標記。?
: Lazy - 使前面的量詞變得惰性,使其匹配盡可能少的字符。 默認情況下,量詞是貪婪的,並且會匹配盡可能多的字符。\n
:轉義字符- 匹配 LINE FEED 字符(字符代碼 10)。{2}
:量詞- 匹配前一個令牌的指定數量。 例如,{1,3} 將匹配 1 到 3。{3} 將完全匹配 3。{3,} 將匹配 3 或更多。[
: Character Set (start) - 匹配集合中的任何字符。 這個開放的方括號開始字符集。\r
:轉義字符- 包含在字符集中 - 匹配回車符(字符代碼 13)。]
: **Character Set (end) - 匹配集合中的任何字符。 這個右方括號結束了字符集。?
:量詞- 匹配前面標記的 0 或 1,有效地使其成為可選。 前面的標記將是字符集中包含的\r
。)
: Capturing Group #1 (end) - 將多個令牌組合在一起並創建一個捕獲組,用於提取 substring 或使用反向引用。 這是指示組結束的右括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.