Java:根据分隔符解析字符串

时间:2013-10-04 08:53:45

标签: java string

我必须设计一个接口,从机器中获取数据,然后绘制它。我已经设计了fetch部分,它获取了一个格式为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@.

之后的第一个字符

问题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 s = "A&B@.13409/13400/13400/13386/13418/13427/13406/13383/13406/13412/13419/00000/00000/";并将函数调用为String[] tokens = StringParser(rightChannelString,"/");

但对于String s = "A&B@.13409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$"之类的字符串,调用String[] tokens = StringParser(rightChannelString,"$");根本不会解析字符串。

我无法弄清楚为什么会出现这种情况。任何人都可以让我知道解决方案吗?

由于

2 个答案:

答案 0 :(得分:1)

关于问题1,java API表示substring方法有2个参数:

  • beginIndex开始索引包含
  • endIndex结束索引独占

所以在你的例子中

String: A&B@.134
Index:  01234567

substring(0,4)=索引0到3所以A&amp; B @,这就是为什么你必须把5作为第二个参数来恢复你的行分隔符。

关于问题2,我猜分裂方法在参数中使用regexp而$是一个特殊字符。为了匹配美元符号,我猜你必须使用\字符来转义它(因为\是字符串中的特殊字符,所以你也必须转义它)。

String[] tokens = StringParser(rightChannelString,"\\$");

答案 1 :(得分:1)

Q1:查看文档中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方法为分隔符采用正则表达式。 $是正则表达式的特殊字符,它匹配行的末尾。