[英]Java: Parsing a string based on delimiter
我必須設計一個接口,在該接口中它從機器中獲取數據,然后進行繪制。 我已經設計了提取部分,並且它提取的字符串格式為A&B@.13409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$
前五個A&B@.
字符是標識符。 請注意,第五個字符是new line feed
即ASCII 0xA
。
我寫的功能-
public static boolean checkStart(String str,String startStr){
String Initials = str.substring(0,5);
System.out.println("Here is start: " + Initials);
if (startStr.equals(Initials))
return true;
else
return false;
}
顯示Here is start: A&B@.
哪個是對的。
問題1:為什么我們需要使用str.substring(0,5)
即當我使用str.substring(0,4)
它僅顯示- Here is start: A&B@
即缺少new line feed
。 為什么New Line feed
造成這種變化。
為了進一步提取剩余字符串,我必須使用s.substring(5,s.length())
而不是s.substring(6,s.length())
即s.substring(6,s.length())
產生3409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$
即缺少標識符A&B@.
之后的第一個字符A&B@.
問題2:
我的解析函數是:
public static String[] StringParser(String str,String del){
String[] sParsed = str.split(del);
for (int i=0; i<sParsed.length; i++) {
System.out.println(sParsed[i]);
}
return sParsed;
}
它可以正確解析String String s = "A&B@.13409/13400/13400/13386/13418/13427/13406/13383/13406/13412/13419/00000/00000/";
並以String[] tokens = StringParser(rightChannelString,"/");
調用該函數String[] tokens = StringParser(rightChannelString,"/");
但是對於String,例如String s = "A&B@.13409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$"
,則調用String[] tokens = StringParser(rightChannelString,"$");
根本不分析字符串。
我無法弄清楚為什么這種行為。 可以讓我知道解決方案嗎?
謝謝
關於問題1,Java API說substring方法采用2個參數:
所以在你的例子中
String: A&B@.134
Index: 01234567
substring(0,4)=索引0到3,所以A&B @,這就是為什么必須將5作為第二個參數來恢復行定界符的原因。
關於問題2,我想split方法在參數中使用了regexp,而$是一個特殊字符。 為了匹配美元符號,我想您必須使用\\字符對其進行轉義(因為\\是字符串中的特殊字符,因此您也必須對其進行轉義)。
String[] tokens = StringParser(rightChannelString,"\\$");
問題1:查看文檔substring
的描述:
Returns a new string that is a substring of this string.
The substring begins at the specified beginIndex and extends to the
character at index endIndex - 1. Thus the length of the substring
is endIndex-beginIndex.
Q2: split
方法使用分隔符的正則表達式。 $
是正則表達式的特殊字符,它與行尾匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.