1

我必须设计一个接口,它从机器中获取数据然后绘制它。我已经设计了 fetch 部分,它会获取一串格式 A&B@.13409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$

前五个A&B@.字符是标识符。请注意,第五个字符是new line feedie 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)ie,当我使用str.substring(0,4)它时只显示Here is start: A&B@-ie missing new line feed。为什么会New Line feed产生这种差异。

进一步提取剩余字符串我必须使用s.substring(5,s.length())而不是s.substring(6,s.length())

ie s.substring(6,s.length())产生3409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$ie 缺少标识符后的第一个字符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 等String s = "A&B@.13409$13400$13400$13386$13418$13427$13406$13383$13406$13412$13419$00000$00000$",调用String[] tokens = StringParser(rightChannelString,"$");根本不解析字符串。

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

谢谢

4

2 回答 2

1

关于问题 1,java API 说 substring 方法需要 2 个参数:

  • beginIndex 开始索引,包括.
  • endIndex 结束索引,独占

所以在你的例子中

String: A&B@.134
Index:  01234567

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

关于问题 2,我猜 split 方法在参数中采用正则表达式,而 $ 是一个特殊字符。为了匹配美元符号,我猜您必须使用 \ 字符对其进行转义(因为 \ 是字符串中的特殊字符,因此您也必须对其进行转义)。

String[] tokens = StringParser(rightChannelString,"\\$");
于 2013-10-04T09:08:44.563 回答
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方法采用正则表达式作为分隔符。$是正则表达式的特殊字符,它匹配行尾。

于 2013-10-04T09:10:15.190 回答