2

我有两个字符串,需要在不检查空行的情况下比较它们......

第一个字符串

CREATE OR REPLACE PROCEDURE "HELL_" 
as
begin
  dbms_output.put_line('Hello!');
end;

第二串

CREATE OR REPLACE PROCEDURE "USER1"."HELL_" 
as

begin

  dbms_output.put_line('Hello!');

end;

我正在使用的代码:

                string text1 = "";
                string text2 = "";
                if (text1.Equals(text2 ))
                    MessageBox.Show("same");
                //no Exception
                else
                {
                    MessageBox.Show("not");
                }
4

3 回答 3

1

您可以使用 分割线 StringSplitOptions.RemoveEmptyEntries。结果string[]不包含空行。然后Enumerable.SequenceEqual很有用。

string[] lines1 = text1.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
string[] lines2 = text2.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
bool equal = lines1.SequenceEqual(lines2);

如果“空”行可以包含空格:

var lines1 = text1.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .Where(l => l.Trim().Length > 0); 
var lines2 = text2.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .Where(l => l.Trim().Length > 0);

如果你想完全忽略空格:

var lines1 = text1.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .Where(l => l.Trim().Length > 0)
    .Select(l => l.Trim()); 
var lines2 = text2.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .Where(l => l.Trim().Length > 0)
    .Select(l => l.Trim()); 

如果您还想忽略这种情况:

bool equal = lines1.SequenceEqual(lines2, StringComparer.OrdinalIgnoreCase);
于 2013-08-11T00:32:05.570 回答
0

对于您的具体情况,这可以解决问题:

         if (firststring.Equals(secondstring.Text.Replace("\r\n\r\n", "\r\n")))
             MessageBox.Show("same");
         //no Exception
         else
         {
             MessageBox.Show("not");
         }
于 2013-08-11T01:25:10.737 回答
0

与其他答案相同(首先也“清理”),但更普遍地将“空白行”视为由 CR、LF 或两者的任何组合界定的任何仅空白行。

string RemoveEmptyLines (string s) {
    return Regex.Replace(s, @"(?:^|[\r\n]+)\s*?(?=(?:[\r\n]+|$))", "");
}

// Usage
RemoveEmptyLines(a) == RemoveEmptyLines(b)

行尾字符(即[\r\n])可以根据需要进行扩展或细化。此正则表达式一次仅处理一个空行(尽管所有空行将在单个 Replace 调用中被删除),具有非贪婪量词和前瞻。我发现这种变化更明确地显示了预期的操作。

于 2013-08-11T01:05:17.120 回答