• 締切済み

C#で string型の文字列で次の3つの処理をしたいのですが、具体的

C#で string型の文字列で次の3つの処理をしたいのですが、具体的にどう記述すればよいでしょうか? string s = "ABCあいうDEおかFGHき"; int pos1 = ???? //(1)DEの位置を求める int pos2 = ???? //(2)FGHの位置を求める //(3)pos1とpos2を使って「おか」の文字列をtにセットする ????

  • roox2
  • お礼率1% (1/79)

みんなの回答

  • infeeld
  • ベストアンサー率37% (3/8)
回答No.4

こんな感じでどうでしょう。 int pos1 = s.IndexOf("DE"); //(1) int pos2 = s.IndexOf("FGH"); //(2) //(3) string result = s.Substring(0, pos1 + "DE".Length) + "t" + s.Substring(pos2); "おか" を "t" に置き換えるだけであれば、以下のような方法もあります。 string result = s.Replace("おか", "t"); ・・・的を得た回答であれば良いのですが。 他にも色々な機能がありますので、string クラスのリファレンスを参照してみて下さい。

  • sygh
  • ベストアンサー率76% (42/55)
回答No.3

少々オーバースペックですが、正規表現を使うと、(1)と(2)を飛ばして(3)を求めることも出来ます。 using System; using System.Text.RegularExpressions; …… const string s = "ABCあいうDEおかFGHき"; var regex = new Regex(@".+DE(?<target>.+)FGH"); var match = regex.Match(s); string t = match.Groups["target"].Value;

回答No.2

半角文字と全角文字が混在している文字列から、半角・全角の切れ目で文字列を抜き出したいということでしょうか? だとすると先頭から一文字ずつ半角か全角かを判定していくしかないと思います。 半角・全角の判定方法は、一文字だけSHIFT-JISに変換して、その一文字のバイト数で判定するしかないようですね。 ↓が参考になると思います。 http://7ujm.net/NET%20Framework/isOneByteChar.html

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

(1)(2) int pos1 = s.IndexOf("DE"); // FGHも同じ (3) 実際には"おか"の位置を取得した方がいいでしょうが、 string t = s.Substring(pos1 + 2, pos2 - (pos1 + 2)); 以上全て、MSDN Library参照です。

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.string(VS.80).aspx

関連するQ&A

  • 文字列検索後にテーブル書き出し処理

    VBにて文字列を検索し、必要な情報をテーブルの各々の項目へセットする処理を考えています。 【実際の文字列例】 AAAAA+111,BBB,CCCC+22,DDDD,EEEE,FFFF,GGGG+4444 ・・・ 文字列は1レコードが','(カンマ)で区切られ、 アルファベットが商品番号、数字がバージョンと考えて下さい。 商品番号は必ず存在しますが、バージョンは無い場合もあり、 バージョンが存在する場合は'+'(プラス)で商品番号とセットになる事を表しています。(バージョンが全く存在しない場合もあります) 既に商品番号のみをテーブルへセットする処理があり、その処理は下になります 【商品番号のみの処理】 dim pos1 dim pos2 = 1 dim itemNo LOOP pos1 := INSTR(文字列, ',', pos2); IF pos1 = 0 THEN itemNo := LTRIM(RTRIM(SUBSTR(文字列, pos2))); ELSE itemNo := LTRIM(RTRIM(SUBSTR(文字列, pos2, pos1 - pos2))); END IF; ~itemNoをテーブルへセットする処理~ END IF; EXIT WHEN pos1 = 0 pos2 = pos1 + 1 END LOOP 上記プログラムにバージョンを考慮した場合、どのように変更となるでしょうか?実プログラムをご教授くだされば幸いです。 素人の質問で申し訳ないのですが、宜しくお願い致します。

  • JAVA String型のメモリ上の処理について

    JAVA初心者です。 String s; s = "abc"; という処理で、それぞれ一行ずつの文はメモリ上ではどのようなことを行っているか分かりません。 また、 Sampleclass sc;//自作クラス sc =new Sampleclass(); だとString型と同じ処理が働いているのでしょうか? int型では int i; …メモリ領域の確保(4バイト)し、iを宣言。 i = 3; …メモリ領域のiに000……011を格納。 だと思いますが、どうも同じ考えでは無いようです。 メモリ上だとString,Sampleclassのそれぞれの行はどのようにメモリ上で動いているか教えて下さい。 よろしくお願い致します。 テンプレ String s… s = "abc"… Sampleclass sc… sc =new Sampleclass()…

  • C(char *s1)の文字列をObjective-Cの文字列(NSS

    C(char *s1)の文字列をObjective-Cの文字列(NSString *s2)にするにはどうしたらよいのでしょうか? char s1[] = "abc"; NSString *s2 = [[NSString alloc] initWithUTF8String:s1];  // (A) NSLog(@"s2=[%s]", s2); 結果がabcかなと思っていましたが、読めない変な文字が表示されました。 (A)を NSString *s2 = [NSString stringWithFormat:@"%s", s1]; に変えても同じでした。 s1のC文字列は日本語を含まないアルファベットの文字列なのになぜ?と 困っています。 Objective-Cの初心者で申し訳ありません。

  • Stringの文字列をString[]配列に変換したい

    お世話になります♪ たとえばこういうStringの文字列があるとします。 String s = "私は Javaを 勉強 しています。"; これを下記のようなイメージでString[]配列に変換したいのですが、 {"私は","Javaを","勉強","しています。"}; 何かいい方法はないでしょうか? ヒントをください! よろしくお願いします。

    • ベストアンサー
    • Java
  • String文字列の解析の方法(初歩的ですみません

    皆様、はじめまして。sakiと申します。 javaを習い始めて2週間の初心者です。 今回はどうしてもわからな問題があり、質問することに致しました。 どうぞよろしくお願いします。以下、問題です。 String文字配列のaaa[SAKI]and[DOG]like[DOG=5]love[SAKI=-20]を左からj順に解析していく。 [ ]で囲まれていない文字列はString文字列として返す。 [ ]が現れた場合は、中身が"SAKI"の場合は、String型文字列"SAKI"を返す。 [ ]の中身が"DOG"の場合は、String型文字列"DOG"を返す。 また[ ]の中に=がある場合は=の後ろの数字をint型で返す。 という処理がわかりません。 for文とcharAt()メソッドで1文字ずつ抜き出し、それをchar型配列に格納し、さらにString型に変換して判別するという方法を考えたのですが上手くいきませんでした。 ご親切な方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • [C#]2つのランダム文字列を作りたい

    いつもありがとうございます。 2種類のランダム文字列を作りたいのですが、 なぜか同じ文字列が作成されるという現象が起こります。 以下の関数を用意して public static string ランダム(int 桁数) { string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; Random Random = new System.Random(); for (int i = 0; i < 桁数; i++) { randomcode += codelist[Random.Next(0, 36)]; } return randomcode; } textBox1.Text = ランダム(10); textBox2.Text = ランダム(10); とやっても、同じランダムの文字列が入ってしまいます。 間に、 Thread.Sleep(100); とか入れると変わるのですが・・・ 理由がわかりません。 初心者的質問ですみませんがよろしくお願いします。

  • c++のstd::stringについて

    VC++2008でフォームアプリケーションを作成しています。 シリアルポートから受け取った文字列の一部を抜き出して処理をするため,VBではmid関数に相当するような機能として,std::stringを使用しようとしています。 しかし, std::string str("ABC" ,1,2); とした場合は『BC』が問題なく返ってきましたが, std::string str(recieveddata ,1,2); のように,文字列の部分を変数にしたら,ビルドエラーになってしまいます。(ポインタ?を理解する必要があるのでしょうか?) どのようにすれば,VBのmid相当の機能を実現できるでしょうか?

  • C# 巨大な文字列の計算をさせたい

    お世話になります。 C#にて、文字列からなる計算式 string s = "(3270+(5*4))/7"; のようなものを計算して 値を返す処理を作成したいと思っています。 http://dobon.net/vb/dotnet/programing/eval.html ↑上記のサイト様から、DataTable.Computeで 求める方法を参考にしたのですが、戻り値を decimalで受けたいのですが、decimalで取得することができません。 doubleでは取得できますが、decimalでcastしようと すると、InvalidCastExceptionが発生します。 string exp = "(1+6)*5/(7-4)"; //式を計算する System.Data.DataTable dt = new System.Data.DataTable(); decimal result = (decimal)dt.Compute(exp, "");        ↑この行で発生 要は、intやdoubleでは収まらない巨大な桁を持つ文字列の 計算をさせたいのですが、どうすればよいでしょうか。 よろしくお願いいたします。

  • String型の変数に代入されている2つの文字列を論理演算したいです。

    String型の変数に代入されている2つの文字列を論理演算したいです。 上記の通りなんですけど 例えば String a = "あいうえお"; String b = "aiueo"; このような二つの文字列を論理演算したあと 16進数の文字列としてあらたな変数(String型)に代入したいのですが どのように記述すればよろしいでしょうか? 初心者なものでわかりやすく説明していただけるとありがたいです。

    • ベストアンサー
    • Java
  • C言語 ポインタを使用した文字反転処理

    #include <stdio.h> #include <string.h> #define MAX_WARD 256 void main(void) { //===変数宣言=== char aDataIn[MAX_WARD]; //反転前文字列入力先 char aDataOut[MAX_WARD]; //反転後文字列格納先 char *pDataIn, *pDataOut; //反転前・後配列操作用ポインタ int nStrlength; //入力文字数 int nLoopCntWord; //反転処理ループ用 printf("何か文字を入力してください(255文字以内)>"); scanf("%s", &aDataIn); nStrlength = (int)strlen(aDataIn); printf("\マークn文字数は「%d」文字です。\n", nStrlength); //===文字列の反転処理=== pDataIn = ■■■■■■; //aDataIn の最終文字位置 pDataOut = ■■■■■■; //aDataOutの先頭 for( nLoopCntWord = 0; nLoopCntWord < ■■■■; nLoopCntWord ++) { ■■■■■■ = *pDataIn; pDataIn ■■; pDataOut ■■; } ■■■■■■ = ■■; printf("*** 反転処理完了 ***\n"); printf("入力した文字列:%s\n", aDataIn); printf("反転した文字列:%s\n", aDataOut); rewind(stdin); getchar(); } 黒い部分の答えを教えてください

専門家に質問してみよう