• ベストアンサー

文字列の()以外の取得について。

string型の値に、"××××(○○○○)"という文が入ってたとして これの、××××の部分だけ取り出す事はできますか? 条件として ×も、○も、文字数は変動します。 ()も文字として含まれています。 できるか、出来ないかだけでも結構ですので、 暇な方お返事ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.2

Instr関数とLeft関数を組み合わせて使いましょう。 Instrで"("が出現する位置を取り出し、それより左をLeft関数で取り出します。 strText1 = "×××(○○○)" strText2 = Left(strText1, InStr(strText1, "(") - 1) これで strText2 に "×××" が取り出せます。

mutuzi
質問者

お礼

的確な答えどうもありがとうございます。 leftで文字列を取るのはわかったのですが、 どうやって"("が何個目にあるのか探しかたがわかりませんでした。 これからやってみます。 返答どうもありがとうございました。

その他の回答 (1)

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  ()も文字として含まれているという事は、   ××(×)××(●●(●●●)   なんていうケースもあるという事でしょうか?  だとすれば無理です。 何らかの法則性が必要です。  例えば、()を文字として使用する場合は必ず全角にするとか。  参考になれば幸いです(..

mutuzi
質問者

お礼

わざわざどうもありがとうございます。 今回は、×××(○○○)という型のみの話でした。 でも、上のような、法則の無いケースでは出来ないということをこれからの参考にさせてもらいます。 返答どうもありがとうございました。

関連するQ&A

  • 文字列の取得

    string.subString()のなどで文字列を指定文字数分取得する場合に、バイト数指定で取得する方法ってありますか? 教えてください。

    • ベストアンサー
    • Java
  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。

  • 目的の文字列を取得するには?

    ×××× 2011年10月6日 ×××××× というような文字列から日付の部分を取り出そうとしています。 if (mb_ereg("([0-9]{4})年([0-9]{2,})月([0-9]{2,})日",$string,$result)){ echo $result; } という方法で取得しようとしているのですが、失敗します。 半角数字と全角の漢字が混在しているような文字列から、目的の部分を取得する にはどうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • cocoa objective-c の文字列の幅と高さを取得したい

    ご存知の方、教えていただけますか? NS(attribute)String、もしくはNSTextFieldなどで文字数と文字属性で文字の幅と高さを取得できるメソッドはありますか?探してみたのですが、見つけられませんでした。 すみません。よろしくお願いします。

  • 文字列操作で特別な記号の間値取得方法は

    文字列操作で特別な記号の間値取得方法はどうでしょうか。 たとえば <column dbType="bpchar" javaType="String" name="subjectcode" required="true"> とString値に格納されている場合、 name="から始まって"で終わる部分の値を取得したいです。 つまりsubjectcodeを取得しています。 name="--- " の中は(""の間)変更されるので name="--- " の---部分を取得するロジックが必要です。 もしやり方を御存じなら教えていただきたいです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現:文字列の最後にマッチした文字以外を取得

    phpを使って、正規表現と関数で文字列の編集を行っているのですが いい方法が思いつきません。 やりたいことは以下のようなことです。 $find ="\n"//マッチさせたい文字 $string = "リンゴ、空、\nミルク、車\n";//検索対象 $str=関数($string);//わからない部分 print($str); ↓表示結果 リンゴ、空、\nミルク、車 文字列のインデックスの0から、最後にマッチした文字列の直前までを取得するにはどうしたらよいでしょうか。 またこのような表現には何か名前がついていますか? ご教授ください。

    • ベストアンサー
    • PHP
  • 部分文字列の一致を検出

    2つの文字列がありstring1とstring2とします。 やりたいことは、string1の中のある部分文字列がstring2の部分文字列と一致する場合、真を返す関数を作りたいのです。関数プロトタイプのイメージはこんな感じです。 bool CheckPartialMatch(char* string1, char* string2, int minChars); [機能] string1とstring2の部分文字列(minChars文字数以上)の一致の有無を調査する。 大文字と小文字の区別はしない。 [パラメータ] string1:比較元のNULL終端文字列 string2:比較先のNULL終端文字 minChars:最小一致文字数 例として下記のようなケースを考えます。 string1="BananaAppleOrange" string2="LemonPineappleKiwi" minChars=4の場合、上記例では"appl"の4文字が一致しますのでtrueが返ることになります。 上記例では、minChars<=5ならtrue, minChars>=6ならfalseとなります。 部分一致が1か所でも見つかれば、その時点で以降の調査を打ち切ります。 何か所一致したとか、一致した位置といった情報は返しません。(位置情報は追加コストなしで返せるでしょうが、今回は必要ありません) もちろん、ベタにstring1の1文字目から順に逐一string2と比較すれば実現できるのですが、それでは時間がかかります。 実際には、この処理をあるフォルダ内の全ファイル名に対して行いたいと思っています。 例えばファイル数が100とすると、組み合わせの数は100*(100-1)/2で4950となります。 仮に1ペアのチェックの所要時間が10msとしても、トータルで約50秒かかることになります。 1000ファイルともなると優に1時間を超える所要時間となり、現実的ではありません。 メモリを食い尽くすような処理ではないので放っておけば終わるのでしょうが、本当は数千のファイルに対してこの処理を行いたいと思っています。 以上を高速に処理する手段やアルゴリズムはないでしょうか? boostなど外部のライブラリを使用した方が早いのであれば、それをご提案頂いても構いません。 実際の使用環境ではminCharsが4程度、比較文字列は平均して20文字程度(2バイト文字含む)を想定しています。 処理時間を低減するため、対象文字を英数字('A-Z'、'a-z'、'0-9')のみに限定することもオプションとして考慮したいと思っています。ファイル名ですので、実際には文字列内に2バイト文字や記号類も混じっています。 あらかじめ全ての入力文字列に対して英字を小文字に変換しておくとか、英数字以外の文字を(連続する場合はまとめて)代替文字("@"等)に置換しておけば少しは負荷軽減になるかとは思いますが、効果のほどは不明です。

  • 文字列を逆転させて表示するには

    Java超初心者です。 タイトルの通りJavaで文字列を逆転させたいのです(出力まで含む)。 文字列abcdefgをgfedcbaみたいな感じでです。 以下に自分が分かる範囲で書いてみました(分からない部分が多いので未完成です、すいません)。 //の部分のコメントアウトした箇所はJavaの方で元々逆転させる文法があるらしく、それを検索して書きました(今回は無視してください)。 しかしもっと基本的な文法を用いた方法が出来ないと駄目だと思い、今回はreverse等の既存の文法を使わず、繰り返しのfor文とchar型で文字を1つ1つ連結して文字列を逆転した形にしたい訳です。 私の作成した文は関係ない文があったり、おかしいところが多々あると思いますが、どうしたらよいか教えてください(実際以下のプログラムの出力結果が目標とかけ離れているのは承知してます、恥ずかしいですがあえて状況を把握して欲しいので載せます)。 よろしくお願いします。 public class hantai { public static void main(String[] args) { String str = "abcdefg"; int length = str.length(); System.out.println("length " + length); System.out.println("charAt(0)=" + str.charAt(0)); String value =""; for(int i = 0; i < str.length(); i++) { char c = str.charAt(i); value = value + c; System.out.println(value); //StringBuffer sbrev = new StringBuffer(str); //String strrev = sbrev.reverse().toString(); //System.out.println(strrev); } } } ホント、こんなレベルなんで暇なときにでも解答お願いします、ハハ・・・orz

    • ベストアンサー
    • Java
  • 文字列を返すVCで作成したDLL関数をVBで呼ぶと...

    VC++で文字列を返すDLL関数を作成しました。 LPCSTR GetVcString(void) これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。 1. Dim Ret As String 2. Ret=GetVcString() 3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている 4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる 2行目と3行目の間に、 Ret=Left(Ret,InStr(Ret,vbNullChar)-1) を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

専門家に質問してみよう