C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.89879 の関連記事表示

<< 0 >>
■89879  VB.NETで複数文字列を置換する方法
□投稿者/ tororu -(2019/01/14(Mon) 13:54:42)

    分類:[.NET 全般] 


    ある文字列変数に含まれる
    全ての
    \ = ; #

    \\ \= \; \#
    に置換したいと考えています。


    Text_Temp = Text_Temp.Replace("\"c, "\\")
    Text_Temp = Text_Temp.Replace("="c, "\=")
    Text_Temp = Text_Temp.Replace(";"c, "\;")
    Text_Temp = Text_Temp.Replace("#"c, "\#")


    とやればできると思いますが、
    毎回、文字列の頭から検索をかけることになるため
    冗長的で処理速度が遅いと思います。
    もっと効率的な方法はありますでしょうか?

    Forループで文字列の頭からIf文で探す方が速いのでしょうか?








親記事 /過去ログ155より / 関連記事表示
削除チェック/

■89880  Re[1]: VB.NETで複数文字列を置換する方法
□投稿者/ WebSurfer -(2019/01/14(Mon) 14:52:33)
    No89879 (tororu さん) に返信

    > \ = ; #

    それらの文字は、対象とする文字列の中では必ず単独で現れるという条件ですか?

    例えば、"abc\\def\#\#あいうえお\========あいうえお" というようなことない?
    もしあったらどうするのですか?

記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89882  Re[2]: VB.NETで複数文字列を置換する方法
□投稿者/ tororu -(2019/01/14(Mon) 15:33:21)
    いま試してみましたが
    "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"

    となり、出力結果は問題ないと思います
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89884  Re[3]: VB.NETで複数文字列を置換する方法
□投稿者/ WebSurfer -(2019/01/14(Mon) 17:38:58)
    No89882 (tororu さん) に返信
    > いま試してみましたが
    > "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"
    >
    > となり、出力結果は問題ないと思います
    >

    例えば最初から \ が \\ となっていて変換する必要がないのに、それを \\\\ とする
    のは意味がないと思いますが、そういうのは考えなくていいのですか・・・ということ
    をお聞きしてます。
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89885  Re[3]: VB.NETで複数文字列を置換する方法
□投稿者/ WebSurfer -(2019/01/14(Mon) 17:43:05)
    No89882 (tororu さん) に返信
    > いま試してみましたが
    > "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"
    >
    > となり、出力結果は問題ないと思います

    他の例として、例えば ================ を区切りの意味で使っているとすると、
    それを \=\=\=.... に変換するのもダメだと思いますが、そういうのも考える必要
    はないのでしょうか?
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89886  Re[4]: VB.NETで複数文字列を置換する方法
□投稿者/ tororu -(2019/01/14(Mon) 17:45:06)
    よく分かりませんが
    出力結果は
    "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"

    これで問題ないのですが。
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89887  Re[5]: VB.NETで複数文字列を置換する方法
□投稿者/ WebSurfer -(2019/01/14(Mon) 17:52:39)
    No89886 (tororu さん) に返信
    > よく分かりませんが
    > 出力結果は
    > "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"
    >
    > これで問題ないのですが。
    >

    そういうことですと、私がお役に立てることはなさそうです。
    すみませんが、他の方の回答をお待ちください。
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89888  Re[6]: VB.NETで複数文字列を置換する方法
□投稿者/ Hongliang -(2019/01/14(Mon) 19:46:20)
    // どんな回答を用意してたのか気になるな−。

    実際問題として、入力が何十万文字もあるとか、その処理を何万回も繰り返すとか、そういうことでない限りは、今時のPCにおいては気にするほどの速度差にはならないと思われます。
    取り敢えずはReplaceを何回か繰り返す処理をEscapeとかなんとかそういう関数に分けておいて、パフォーマンスに問題があれば処理を差し替えるようにする、という方針が良いんではないでしょうか。
    // その際はまず計測して、そこがボトルネックであると確認してから。

    「効率的」というのには、実行速度もありますが、開発の速度という側面も考える必要があります。
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89891  Re[1]: VB.NETで複数文字列を置換する方法
□投稿者/ デンタル -(2019/01/15(Tue) 01:12:22)
    No89879 (tororu さん) に返信
    
    95文字と100万文字で比較してみましたけど
    String.Replaceが速かったです
    
    100万文字でForループと同じくらいです
    
    String.Replaceが速い理由は
    インスタンス変数の配列に直でアクセスできるのが
    大きいのかなと思いました
    
    StringBuilderが遅いのは意外でした
    
    https://paiza.io/projects/gyFJOFQYQaH2ssvwmxRu4A
    
    文字数: 95
    	StringReplace
    		00:00:00.0154670
    	StringBuilderReplace
    		00:00:00.0488597
    	LoopDictionary
    		00:00:00.0265434
    	LoopLoop
    		00:00:00.0228445
    	Regex
    		00:00:00.0594639
    文字数: 1000000
    	StringReplace
    		00:00:00.0622056
    	StringBuilderReplace
    		00:00:00.1395222
    	LoopDictionary
    		00:00:00.0708859
    	LoopLoop
    		00:00:00.0634652
    	Regex
    		00:00:00.1376695
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89913  Re[2]: VB.NETで複数文字列を置換する方法
□投稿者/ なちゃ -(2019/01/16(Wed) 15:20:45)
    StringBulderが遅いのは多分4.0以降で内部バッファがチャンク形式に変更されたからではないかと思う。
    2.0ベースの実行環境だともう少し速いのではないかなあ。
記事No.89879 のレス /過去ログ155より / 関連記事表示
削除チェック/

■89918  Re[3]: VB.NETで複数文字列を置換する方法
□投稿者/ tororu -(2019/01/16(Wed) 21:27:22)
    デンタルさん
    詳細な計算比較結果ありがとうございます。
    やはりreplace関数がもっとも高速なのですね
    非常に参考になりました。
記事No.89879 のレス / END /過去ログ155より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -