【发布时间】:2017-10-09 05:48:25
【问题描述】:
如果我有这个名为 tokenArray 的字符串数组。其内容如下
[num1] [;] ["] [This] [is] [a] [\"] [string] [literal] [\"] [.] [?] ["]
注意:非转义和转义双引号原样。
问题:
如何将数组中两个双引号之间的值识别为单个字符串文字?, .我正在使用字符串连接来保存找到的临时词位,并在找到匹配项时最终保存到堆栈。在我识别单行注释之前的情况下,它是 // 和 tHiS_iS_tHe_EnD_Of_NeWlInE 用于开始和结束匹配。我如何将它与带有两个双引号的正则表达式一起应用,就像上面我放在下面的代码中的循环一样。 TIA。
背景:
只是我找到的样本是单个字符串声明的形式,而我的样本是在一个数组中。我不太明白它是如何处理字符串数组的。
顺便说一句。我正在制作一个字符串分析器,它扫描一段代码并输出特定语言的词位。除了没有正则表达式的语言的定界符和一些关键字之外,我已经确定了每个词位,如单个和块 cmets。但我想为我尚未检测到的字符串文字尝试正则表达式。通过 if 和 else 语句应用检测非常耗时且令人困惑,但我至少做到了。
下面是我用来识别数组中单行 cmets 的代码。 for 循环是我的整个循环,用于读取我的数组并将新检测到的词素分配给堆栈。
for(int ctr=0;ctr<removedNullsStackSize.length;ctr++) {
if(removedNullsStackSize[ctr].equals("//")) {
do {
tempString = tempString + " " + removedNullsStackSize[ctr] ;
ctr++;
if(ctr>=removedNullsStackSize.length-1){
removedNullsStackSize[ctr]="tHiS_iS_tHe_EnD_Of_NeWlInE";
}
}
while(removedNullsStackSize[ctr]!="tHiS_iS_tHe_EnD_Of_NeWlInE");
myQCommentsTokenized.add(tempString);
tempString="";
}
在上面的代码中,它的作用是在检测到 // 时连接前面的数组,并且在检测到换行符之前不会停止连接。如果检测到换行符,则将其保存为临时字符串以作为找到的新词位进行堆栈。
【问题讨论】:
-
这个数组的来源是什么?有没有可能是 JSON 或其他常用格式?
-
在你的数组定义中...{"int","num1",";",""","This",..., 双引号不是有原因吗逃跑了?应该是 ...{"int","num1",";",""\","This",... 吗?
-
理想情况下,您应该在词法分析器中执行此操作,然后再将输入标记化。因为现在,你不知道单词之间有多少空格甚至换行符。
-
只是一个典型的java数组。数组的来源来自多个数组和堆栈。就像这个一样,数组是由数组和堆栈组成的,它具有检测关键字、标识符等的条件。所以我在上面设置了示例数组。我在必须检测字符串文字的数组部分。我最近刚刚发现了正则表达式,但不能完全掌握如何将它应用到我的代码中,除非我重写我的整个程序。 :(
-
请提供minimal reproducible example。数组中的实际内容非常不清楚,因为您只提供了一个伪代码定义。