我必须设计一个接口,从机器中获取数据,然后绘制它。我已经设计了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,"$");
根本不会解析字符串。
我无法弄清楚为什么会出现这种情况。任何人都可以让我知道解决方案吗?
由于
答案 0 :(得分:1)
关于问题1,java API表示substring方法有2个参数:
所以在你的例子中
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
方法为分隔符采用正则表达式。 $
是正则表达式的特殊字符,它匹配行的末尾。