C# 在字符串中添加空格,但不能在引号之间添加空格
我有这个字符串:C# 在字符串中添加空格,但不能在引号之间添加空格,c#,string,c#-4.0,tokenize,C#,String,C# 4.0,Tokenize,我有这个字符串: string myString = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");"; 我的字符串为纯文本: do Output.printString(“您想点击(h)还是站立?” 我想做到: 做输出。打印字符串(“Do@you@want@to点击@(h)@or@Stand@(s) ?” 这个想法是每个单词之间都有一个空格,但是如果撇号中有一个字符串,我希望它是没有空格的,在这个函数之后,我
string myString = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
我的字符串为纯文本:
do Output.printString(“您想点击(h)还是站立?”
我想做到:
做输出。打印字符串(“Do@you@want@to点击@(h)@or@Stand@(s) ?”
这个想法是每个单词之间都有一个空格,但是如果撇号中有一个字符串,我希望它是没有空格的,在这个函数之后,我可以做:
s.Split(' ');
然后把字符串放在一个字符串中
我所做的是:
public static string PrepareForSplit(this string s)
{
string ret = "";
if (s.Contains("\""))
{
bool equalsAppear = false;
foreach (var nextChar in s)
{
char charToConcat;
if (nextChar == '"')
{
equalsAppear= equalsAppear == true ? false : true;
}
if (nextChar == ' ' && equalsAppear)
{
charToConcat = '@';
}
else
{
charToConcat = nextChar;
}
ret += charToConcat;
}
}
if (String.IsNullOrWhiteSpace(ret))
ret = s;
string[] symbols = {"{", "}", "(", ")", "[", "]", ".",
",", ";", "+", "-", "*", "/", "&", "|", "<", ">", "=", "~","#"};
foreach(var symbol in symbols)
if(ret.Contains(symbol))
{
if (!ret.Contains('"') || !((symbol=="-") || symbol==","))
{
ret = ret.Replace(symbol, " " + symbol + " ");
}
}
if(ret.Contains("\t"))
{
ret = Regex.Replace(ret, @"\t", " ");
}
return ret;
}
公共静态字符串PrepareForSplit(此字符串为s)
{
字符串ret=“”;
如果(s.包含(“\”)
{
bool equalsequent=false;
foreach(s中的变量nextChar)
{
Chart charToConcat;
如果(nextChar==“”)
{
EqualsAspect=EqualsAspect==真?假:真;
}
如果(nextChar==''&&EqualsExeen)
{
charToConcat='@';
}
其他的
{
charToConcat=nextChar;
}
ret+=charToConcat;
}
}
if(String.IsNullOrWhiteSpace(ret))
ret=s;
字符串[]符号={“{”、“}”、“(“,”)、“[”、“]”、“,
",", ";", "+", "-", "*", "/", "&", "|", "", "=", "~","#"};
foreach(符号中的变量符号)
如果(返回包含(符号))
{
如果(!ret.Contains(“”)| |!((symbol==“-”)| | symbol==“,”)
{
ret=ret.Replace(符号“+”符号+”);
}
}
如果(ret.Contains(“\t”))
{
ret=Regex.Replace(ret、@“\t”和“”);
}
返回ret;
}
我的问题是,在这个函数的末尾,我得到了以下字符串:
执行输出。打印字符串(“Do@you@want@to@点击@(h)@or@Stand@(s);
正如你在假设没有空格的字符串中看到的,我有空格,然后我的程序就不能正常运行了。有人请帮忙!我会使用正则表达式来提取你的字符串 您可能会这样输入起始字符串:
string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:
\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的
编辑:像这样使用它(基于)
Edit2:现在可以工作了:-)我会使用正则表达式来提取字符串 您可能会这样输入起始字符串:
string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:
\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的
编辑:像这样使用它(基于)
Edit2:现在可以工作了:-)我会使用正则表达式来提取字符串 您可能会这样输入起始字符串:
string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:
\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的
编辑:像这样使用它(基于)
Edit2:现在可以工作了:-)我会使用正则表达式来提取字符串 您可能会这样输入起始字符串:
string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:
\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的
编辑:像这样使用它(基于)
Edit2:现在它可以工作了:-)我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分
string[] parts = s.Split('"');
现在你有:
part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内
// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
part[i] = InsertSpacesBetweenWords(part[i]);
}
string result = String.Join("\"", part);
到
通过使用逻辑NOT运算符
!
我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分
string[] parts = s.Split('"');
现在你有:
part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内
// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
part[i] = InsertSpacesBetweenWords(part[i]);
}
string result = String.Join("\"", part);
到
通过使用逻辑NOT运算符
!
我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分
string[] parts = s.Split('"');
现在你有:
part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内
// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
part[i] = InsertSpacesBetweenWords(part[i]);
}
string result = String.Join("\"", part);
到
通过使用逻辑NOT运算符
!
我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分
string[] parts = s.Split('"');
现在你有:
part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内
// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
part[i] = InsertSpacesBetweenWords(part[i]);
}
string result = String.Join("\"", part);
到
通过使用逻辑NOT运算符
!
您可以使用正则表达式来实现这一点。如何编写正则表达式?如何打印引号?打印字符串是我字符串的一部分,我将更新这个问题,它将更加清楚…当您说“撇号”(”
)时,您是指“括号”()
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(”
)时,你是指“括号”(()
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(”
)时,你是指“括号”(()
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(“
)时,你是指“括号”()吗