Java 工作场所与字符串相关的编程问题
我有一个基于分隔符Java 工作场所与字符串相关的编程问题,java,Java,我有一个基于分隔符“(双引号)搜索的字符串 因此,当我输入字符串“program”时,它能够根据分隔符搜索字符串的开头和结尾,并返回我放入向量中的字符串程序 现在,如果我输入一个字符串“program”123”“,它将返回子字符串,如program,123,123 现在我想要的结果是程序“123”,根据用例,它是一个有效的字符串,但它包含“,作为字符串的一部分,这就是按分隔符搜索无法区分字符串开头和结尾的地方 有人能帮我解释一下逻辑吗 下面是我正在使用的方法 enter code here 公
“
(双引号)搜索的字符串
因此,当我输入字符串“program”
时,它能够根据分隔符搜索字符串的开头和结尾,并返回我放入向量中的字符串程序
现在,如果我输入一个字符串“program”123”“
,它将返回子字符串,如program
,123
,123
现在我想要的结果是程序“123”
,根据用例,它是一个有效的字符串,但它包含“
,作为字符串的一部分,这就是按分隔符搜索无法区分字符串开头和结尾的地方
有人能帮我解释一下逻辑吗
下面是我正在使用的方法
enter code here
公共静态PVector标记输入(最终字符串sCmd)
抛出ExceptionOpenQuotedString
{
如果(sCmd==null)
{
返回null;
}
PVector rc = new PVector();
if (sCmd.length() == 0)
{
rc.add(StringTable.STRING_EMPTY);
return rc;
}
char chCurrent = '\0';
boolean bInWhitespace = true;
boolean bInQuotedToken = false;
boolean bDelim;
int start = 0;
int nLength = sCmd.length();
for (int i = 0; i < nLength; i++)
{
chCurrent = sCmd.charAt(i); // "abcd "ef"" rtns abdc ef ef"
bDelim = -1 != APIParseConstants.CMD_LINE_DELIMS.indexOf(chCurrent);
if (bInWhitespace) // true
{
// In whitespace
if (bDelim)
{
if ('\"' == chCurrent)
{
start = i + 1;
bInQuotedToken = true;
bInWhitespace = false;
} // if ('\"' == chCurrent)
}
else
{
start = i;
bInWhitespace = false;
} // else - if (bDelim)
}
else
{
// Not in whitespace
boolean bAtEnd = i + 1 == nLength;
if (!bDelim)
{
continue;
}
else
{
if ('\"' == chCurrent)
{
if (!bInQuotedToken)
{
// ending current token due to '"'
if (bAtEnd)
{
// non terminated quoted string at end...
throw new ExceptionOpenQuotedString(
sCmd.substring(start));
}
else
{
rc.add(sCmd.substring(start, i)); // include quote
bInQuotedToken = true;
bInWhitespace = false;
} // if (bAtEnd)
}
else
{
// ending quoted string
//if (!bAtEnd)
{
rc.add(sCmd.substring(start, i)); // don't include quote
bInQuotedToken = false;
bInWhitespace = true;
} // if (bAtEnd)
} // else - if (!bInQuotedToken)
}
else
{
// got delim (not '"')
if (!bAtEnd && !bInQuotedToken)
{
rc.add(sCmd.substring(start, i));
bInWhitespace = true;
} // if (bAtEnd)
} // else - if ('\"' == chCurrent)
} // else - if (!bDelim)
} // else - if (bInWhitespace)
} // for (short i = 0; i < nLength; i++)
if (!bInWhitespace && start < nLength)
{
if (!bInQuotedToken || chCurrent == '"')
{
rc.add(sCmd.substring(start));
}
else
{
throw new ExceptionOpenQuotedString(sCmd.substring(start));
} // else - if (!bInQuotedToken)
} // if (!bInWhitespace && start < nLength)
return rc;
}
PVector rc=new PVector();
如果(sCmd.length()==0)
{
rc.add(StringTable.STRING_为空);
返回rc;
}
char chCurrent='\0';
布尔二进制空格=真;
布尔值bInQuotedToken=false;
布尔bDelim;
int start=0;
int nLength=sCmd.length();
对于(int i=0;i
您应该跳出“内部”。
否则,您可以检查第一个和最后一个“字符的位置,并使用这些位置作为分隔符拆分/剪切字符串。您应该转义内部”。
否则,您可以检查“第一个”和“最后一个”字符的位置,并使用这些位置作为分隔符拆分/剪切字符串。每当您将一种编码(所有可能的字符串)嵌入另一种编码(带引号的字符串)时,只有一些基本技术允许您明确地解析它们:
每当你将一个编码(所有可能的字符串)嵌入到另一个(引用字符串)中时,只有几个基本的技术允许你使用PAR。