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

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

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

Re[3]: C# 文字列の中から半角文字列だけを抽出したい


(過去ログ 65 を表示中)

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

■37772 / inTopicNo.1)  C# 文字列の中から半角文字列だけを抽出したい
  
□投稿者/ うず (8回)-(2009/06/30(Tue) 10:50:04)

分類:[C#] 

Visual Studio 2005, 言語はC#を使用しています。

string型の文字列の中から、半角文字(英字、数字、記号)のみを抜き出したいと考えています。
たとえば、
  string test = "123abcいろは+-*";
という文字列であれば、
  "123abc+-*"という結果を得たいということです。

もちろん、力技で文字列を先頭から一文字ずつチェックして・・・という方法も考えましたが
もっと良いやり方はないかと思い質問させていただきました。
よろしくお願いします。
引用返信 編集キー/
■37775 / inTopicNo.2)  Re[1]: C# 文字列の中から半角文字列だけを抽出したい
□投稿者/ よねKEN (365回)-(2009/06/30(Tue) 11:08:53)
RegexクラスのReplaceメソッドで「半角文字(英字、数字、記号)」に
該当しない文字を削除するという方法があります。

ご説明内容では記号の範囲が不明なので、サンプルコードでは、
とりあえず-+*だけを除外対象としています。半角カナも除外はしていません。

例)
using System;
using System.Text.RegularExpressions;

class Program
{
static void Main(string[] args)
{
string test = "123abcいろは+-*";
Regex re = new Regex(@"[^-+*a-zA-Z0-9]"); // 「英数字と-、+、*」以外
Console.WriteLine(re.Replace(test, ""));
Console.Read();
}
}
引用返信 編集キー/
■37776 / inTopicNo.3)  Re[1]: C# 文字列の中から半角文字列だけを抽出したい
□投稿者/ επιστημη (2006回)-(2009/06/30(Tue) 11:12:05)
επιστημη さんの Web サイト
> もちろん、力技で文字列を先頭から一文字ずつチェックして・・・という方法も考えましたが
> もっと良いやり方はないかと思い質問させていただきました。

先頭から順にチェックするのはそんなにマズいやり方には思えんのですけど。

using System;
using System.Text;

class Program {
  public static void Main() {
    StringBuilder builder = new StringBuilder();
    string test = "123abcいろは+-*"; 
    foreach ( char ch in test ) {
      // 不恰好だが確実なのは折り紙付き。
      if ( "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHJIJKLMNOPQRSTUVWXYZ!\"#$%&'()=-~^|\\`@{[}]*:+;_?/>.<,".IndexOf(ch) >= 0 ) {
        builder.Append(ch);
      }
    }
    Console.WriteLine("「{0}」", builder.ToString());
  }
}

引用返信 編集キー/
■37777 / inTopicNo.4)  Re[1]: C# 文字列の中から半角文字列だけを抽出したい
□投稿者/ 渋木宏明(ひどり) (1183回)-(2009/06/30(Tue) 11:24:02)
渋木宏明(ひどり) さんの Web サイト
> もちろん、力技で文字列を先頭から一文字ずつチェックして・・・という方法も考えましたが

条件が単純なので、たぶん、それが一番早くて速いです。

引用返信 編集キー/
■37779 / inTopicNo.5)  Re[2]: C# 文字列の中から半角文字列だけを抽出したい
□投稿者/ うず (9回)-(2009/06/30(Tue) 11:45:37)
よねKENさん
Regexを使う方法でコードが簡素にかけるのですね。
正規表現について半角カタカナのチェックも厳密に行えば実現できそうです。
ありがとうございました。

επιστημη さん
渋木宏明(ひどり) さん
力技で文字列を一文字ずつチェックしていく方法でも
今回の場合は問題は少ないのですね(処理速度が速い)
StringBuilder を使う方法は知らなかったので参考になりました。 
ありがとうございました。

解決済み
引用返信 編集キー/
■37791 / inTopicNo.6)  Re[3]: C# 文字列の中から半角文字列だけを抽出したい
□投稿者/ 倉田 有大 (669回)-(2009/06/30(Tue) 14:14:53)
> 力技で文字列を一文字ずつチェックしていく方法でも
> 今回の場合は問題は少ないのですね(処理速度が速い)
> StringBuilder を使う方法は知らなかったので参考になりました。 
> ありがとうございました。

一文字ずつチェックが一番早いのでは。
Regexのほうがたぶん遅いかも。
どっちがどれぐらい早いかな。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -