簡體   English   中英

Java:基於定界符解析字符串

[英]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個參數:

  • beginIndex開始索引, 包括
  • endIndex結束索引, 獨占

所以在你的例子中

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM