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

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

C# と VB.NET の入門サイト

Re[3]: VB.NETで複数文字列を置換する方法


(過去ログ 155 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■89879 / inTopicNo.1)  VB.NETで複数文字列を置換する方法
  
□投稿者/ tororu (1回)-(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文で探す方が速いのでしょうか?









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

> \ = ; #

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

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


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

となり、出力結果は問題ないと思います

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

例えば最初から \ が \\ となっていて変換する必要がないのに、それを \\\\ とする
のは意味がないと思いますが、そういうのは考えなくていいのですか・・・ということ
をお聞きしてます。
引用返信 編集キー/
■89885 / inTopicNo.5)  Re[3]: VB.NETで複数文字列を置換する方法
□投稿者/ WebSurfer (1730回)-(2019/01/14(Mon) 17:43:05)
No89882 (tororu さん) に返信
> いま試してみましたが
> "abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"
>
> となり、出力結果は問題ないと思います

他の例として、例えば ================ を区切りの意味で使っているとすると、
それを \=\=\=.... に変換するのもダメだと思いますが、そういうのも考える必要
はないのでしょうか?
引用返信 編集キー/
■89886 / inTopicNo.6)  Re[4]: VB.NETで複数文字列を置換する方法
□投稿者/ tororu (4回)-(2019/01/14(Mon) 17:45:06)
よく分かりませんが
出力結果は
"abc\\\\def\\\#\\\#あいうえお\\\=\=\=\=\=\=\=\=あいうえお"

これで問題ないのですが。

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

そういうことですと、私がお役に立てることはなさそうです。
すみませんが、他の方の回答をお待ちください。
引用返信 編集キー/
■89888 / inTopicNo.8)  Re[6]: VB.NETで複数文字列を置換する方法
□投稿者/ Hongliang (741回)-(2019/01/14(Mon) 19:46:20)
// どんな回答を用意してたのか気になるな−。

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

「効率的」というのには、実行速度もありますが、開発の速度という側面も考える必要があります。
引用返信 編集キー/
■89891 / inTopicNo.9)  Re[1]: VB.NETで複数文字列を置換する方法
□投稿者/ デンタル (1回)-(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

引用返信 編集キー/
■89913 / inTopicNo.10)  Re[2]: VB.NETで複数文字列を置換する方法
□投稿者/ なちゃ (1回)-(2019/01/16(Wed) 15:20:45)
StringBulderが遅いのは多分4.0以降で内部バッファがチャンク形式に変更されたからではないかと思う。
2.0ベースの実行環境だともう少し速いのではないかなあ。
引用返信 編集キー/
■89918 / inTopicNo.11)  Re[3]: VB.NETで複数文字列を置換する方法
□投稿者/ tororu (5回)-(2019/01/16(Wed) 21:27:22)
デンタルさん
詳細な計算比較結果ありがとうございます。
やはりreplace関数がもっとも高速なのですね
非常に参考になりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -