2

2 つの文字列があり、空白行をチェックせずにそれらを比較する必要があります...

最初の文字列

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

2 番目の文字列

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、または2つの組み合わせで区切られた空白のみの行として扱います。

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

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

行末文字 (つまり[\r\n]) は、必要に応じて拡張または調整できます。この正規表現は、非貪欲な量指定子と前方参照を使用して、一度に 1 つの空白行のみを処理します (ただし、すべての空白行は単一の Replace 呼び出し内で削除されます)。このバリエーションは、意図した操作をより明確に示していることがわかりました。

于 2013-08-11T01:05:17.120 に答える