我有什么我猜是一个逻辑问题。我正在用 C# 编码,但欢迎使用通用的伪代码解决方案。
我有这个文本文件,其中包含例如以下文本:
blah "hello john"
blah 'the code is "flower" '
blah "good night"
我想遍历双引号并对它们做一些事情,但我想忽略单引号中包含的双引号。我得到了开头双引号和结尾双引号的位置(
string data
包含文本文件的内容):C#
// Start searching from beginning
int quotestart = 0, quoteend = 0;
while (data.IndexOf('"', quotestart) != -1)
{
// Get opening double quote
quotestart = data.IndexOf('"', quotestart);
// Get ending double quote
quoteend = data.IndexOf('"', quotestart + 1);
string sub = data.Substring(quotestart + 1, quoteend - quotestart - 1);
Console.WriteLine(sub);
// Set the start position for the next round
quotestart = quoteend + 1;
}
使用我的代码,输出将是:
hello john
flower
good night
因为“花”在单引号内,我希望我的输出是:
hello john
good night
编辑
我目前正在研究一种方法,首先在单引号之间填充所有数据,例如“A”。这样,当我遍历双引号时,单引号之间的任何数据都将被忽略。不确定这是否是正确的方法。
最佳答案
FSM 是最简单的计算机形式之一。这个想法是您拥有有限数量的“状态”信息和稳定的输入流。每个输入导致状态以可预测的方式改变, 仅基于当前状态和当前输入 ,并导致可预测的输出发生。
因此,假设您的输入是单个字符,而您的输出是单个字符或“空”字符。这是一个可以满足您要求的 FSM:
OUTSIDE
、 INSIDEDOUBLE
和 INSIDESINGLE
。 "
、 '
和 x
。 (WOLOG 让 x
代表任何其他字符。) 我们有三个状态和三个输入,所以有九种可能的组合。
OUTSIDE
并获得 x
,则保持 OUTSIDE
并发出 null
。 OUTSIDE
并获得 "
,则转到 INSIDEDOUBLE
并发出 null
。 OUTSIDE
并获得 '
,则转到 INSIDESINGLE
并发出 null
。 INSIDEDOUBLE
并获得 x
,则保持 INSIDEDOUBLE
并发出 x
INSIDEDOUBLE
并获得 "
,去 OUTSIDE
并发出 null
INSIDEDOUBLE
并获得 '
,则保持 INSIDEDOUBLE
并发出 '
INSIDESINGLE
并获得 x
,则保持 INSIDESINGLE
并发出 null
INSIDESINGLE
并获得 "
,则保持 INSIDESINGLE
并发出 null
INSIDESINGLE
并获得 '
,去 OUTSIDE
并发出 null
唯一剩下的就是说开始状态是
OUTSIDE
。所以让我们假设输入是
1 " 2 " 3 ' 4 " 5 " ' 6
。状态和输出是:OUTSIDE
获取 1
,发出 null
,保持 OUTSIDE
。 OUTSIDE
得到 "
,发出 null
,去 INSIDEDOUBLE
。 INSIDEDOUBLE
获取 2
,发出 2
,保持 INSIDEDOUBLE
INSIDEDOUBLE
得到 "
,发出 null
,去 OUTSIDE
。 OUTSIDE
获取 3
,发出 null
,保持 OUTSIDE
。 OUTSIDE
得到 '
,发出 null
,去 INSIDESINGLE
... 其余的自己填写。
这是否足以让您编写代码的草图?
关于c# - 循环双引号但忽略单引号中的双引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19528978/