用引号替换未包含的字符串部分

时间:2016-01-14 18:34:30

标签: c# string parsing

我正在将一个as3代码解析为json对象,现在我需要删除所有未被引号括起来的空格,但将来可能会添加一个选项来用一个替换多个空格。

示例:

<HeaderGridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:horizontalSpacing="8dp"
        android:numColumns="2"
        android:padding="8dp"
        android:stretchMode="columnWidth"
        android:verticalSpacing="8dp" />


List<string> codeList = new List<string>(); codeList.Add("private var a:string = \"this is string\" ;"); codeList = FormatCode(codeList); 的输出应为:

codeList[1]

 - privatevara:string=\"this    is string\";


我很感激任何帮助或想法来解决问题。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作来压缩不在引号内的空格。请注意,这并不能验证引号是否匹配,并且不适用于转义引号。

public static string CompressSpacesOutsideQuotes(string input)
{
  bool quoted = false;
  bool spaceSeen = false;
  var builder = new StringBuilder();
  foreach (char c in input)
  {
    if (c == '"')
    {
      quoted = !quoted;
    }

    if (c == ' ' && !quoted)
    {
      spaceSeen = true;
      continue;
    }

    if(spaceSeen)
    {
      builder.Append(' ');
      spaceSeen = false;
    }

    builder.Append(c);
  }

  if (spaceSeen) builder.Append(' ');
  return builder.ToString();
}

为您的例子

Console.WriteLine(
    CompressSpacesOutsideQuotes("private    var   a:string = \"this    is string\"  ;"));

打印

private var a:string = "this    is string" ;

答案 1 :(得分:0)

也许这样的事情适合你:

$.getScript

enter image description here