• ベストアンサー

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

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

  • Java
  • 回答数3
  • ありがとう数0

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

XMLなら自前で正規表現を書くような手間は掛けずにDOMかSAXで読み込んで name属性を見る方が後々楽だと思う。

その他の回答 (2)

  • nknk80
  • ベストアンサー率65% (17/26)
回答No.2

こんな感じで取得できます。 String string="<column dbType=\"bpchar\" javaType=\"String\" name=\"subjectcode\" required=\"true\">"; //タグ名の終了位置までの検索用正規表現 Pattern startPattern=Pattern.compile("<[\\w]+"); Matcher matcher=startPattern.matcher(string); if(matcher.find()){ //タグ名の終了位置を記録 int attrIndex=matcher.end(); //属性名="属性値" 検索取得用正規表現 matcher.usePattern(Pattern.compile(" *([\\w]+)=\"([\\w]*)\"")); while(matcher.find(attrIndex)){ //取得属性値の標準出力 System.out.println(matcher.group(1)+" is ["+matcher.group(2)+"]"); //特定の属性名だけを取得したい場合 if("name".equals(matcher.group(1))){ System.out.println("nameの属性値は"+matcher.group(2)+"です"); } //次の検索開始位置を属性の終了位置に設定 attrIndex=matcher.end(); } }

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

正規表現のふつうの課題ですね。 まだこれから勉強されるかたのようなので、ここではあえてソリューションのコードは書きません。

関連するQ&A

  • 文字列の操作について教えて下さい。

    Javaで文字列の操作をしたいと考えています。 String str1 = "あいうえおかきく"; String str2 = "あいうえお"; 上記のようなstr1、str2という文字列があるとします。 str1は、str2と同様の文字列を先頭から含んでいます。 str2と同じ文字を省き、それ以降の文字列を取り出して、 String str3 = "かきく"; という文字列を取り出す処理を行いたい、と考えています。 一般的には、どのようなロジックを組むのかと思い質問させて頂きました。 みなさんなら、どのようなプログラムか教えてください。 よろしくお願い致します。m(_ _)m

  • Excel VBA で Oracle CLOB型カラムの文字列を取得する方法

    Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。 Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。 自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。 これ以上の文字数を取得する方法について教えてもらえないでしょうか? '---// コード抜粋 ココから //--- 'ORAセッション生成 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'ORADB生成 Set OraDatabase = OraSession.OpenDatabase(<<dbname>>, <<id>> & "/" & <<passwd>>, 0) Dim SQL As String '一覧取得用SQL Dim RS As Object 'レコードセット SQL = " SELECT <<<clob_col_name>> FROM <<table_name>> " Set RS = OraDatabase.DbCreateDynaset(SQL, 0&) Range("A1").Value = RS.fields("<<clob_col_name>>").GetChunk(0, 3263) RS.Close '---// コード抜粋 ココまで //--- 環境は、Excel 2003、Oracle 9iです。 ひとつよろしくお願いいたします。

  • 列の個数、行の個数を取得することは不可能ですか?

    http://okwave.jp/qa/q7981824.html の続きなのですが A1からD5まで値が入っているのに Sub Sampsle() Dim r As Range Set r = ActiveSheet.UsedRange End Sub で値を格納した場合、 列は全部で4つ 行は全部で5つなのですが ウォッチウインドウで確認すると Column : 1 : Long : Module1.Sampsle Row : 1 : Long : Module1.Sampsle になってしまうのですが、 オブジェクトに格納した値から 列の個数、行の個数を取得することは不可能ですか?

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

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

    • ベストアンサー
    • PHP
  • 文字列をつないでハイパーリンクをつくる方法?

    ある製品品種を表す異なる多くの文字列がエクセルの列に並んでおり、その品種の紹介PDFを張り付けているページのアドレスが、 http://www.abc●●.co.jp/shouhin_XXX_post/  (XXXは品種記号)だとします。 今現在このアドレスに行くには、品種記号をひとつずつ手入力する画面があり、いちいちそこに記号を入力する必要があり面倒です。 そこでエクセルの文字列操作でできないかと思い以下のようにやってみました。 A列 アドレスの前半部分 http://www.abc●●.co.jp/shouhin_ を並べる B列 品種記号 をたてに並べる C列 アドレスの後半部分 _post/ を並べる D列 文字列をつなぐ関数 concatenate で例えばA3,B3,C3を連結する ここまでで、一応アドレスの文字列ができますが、ハイパーリンクにはなってくれませんでした。 そこでD列をE列に 値複写し、全てのセルを一つずつダブルクリックしてエンターを繰り返す、編集するふりをすると、ハイパーリンクになってくれした。 最後の操作が煩わしいのでもっと根本的に良い方法があれば教えていただけないでしょうか。 よろしくお願いいたいます。

  • 文字列中からファイルパスのみを取得する方法

    テキストファイルからデータを1行ずつ読み取り、 その中にファイルパスがあれば他のファイルに書き出すというロジックを考えています。 文字列は 例えば  include ROOT_PATH."/class/test.txt"; という文字列で、この中から  /class/test.txt という文字列だけを取得したいのです。 現在、拡張子から1文字ずつ前の文字列をチェックしていって、「”」が見つかったらその間の文字列を ファイルパスとしようとしています。 これを1発で行ってくれるような関数等ははないでしょうか?   良いお知恵がありましたらご教授お願いします。

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

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

  • 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++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

専門家に質問してみよう