• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:半角カナの文字列操作について)

半角カナの文字列操作について

このQ&Aのポイント
  • 半角カナの文字列操作について説明します。通常10桁の半角カナの文字列がある場合、特定の位置で文字列を分割する方法や、濁点を含む文字列の分割方法について解説します。
  • 文字列を特定の位置で分割する方法について説明します。例えば、10桁の半角カナの文字列を半分に区切る場合、濁点が存在する場合に注意が必要です。濁点がある場合は、濁点を含んだ文字列の前か後ろで分割する方法があります。
  • 濁点を含む文字列の分割方法について説明します。例えば、10桁の半角カナの文字列で濁点が6文字目に存在する場合、濁点を含んだ文字列の前後で分割する方法があります。具体的な分割例も示しているので、参考にしてください。

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

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

>3分割や分割区分が複数になる場合、IF文ですと条件が増えてしまうので >なにか良い方法はないかなと思ったのですが・・・ 「分割区分が複数」というのが何の事かわかりませんが 5桁毎にn分割なら以下のような感じで書けると思いますけど。 List<String> a = new ArrayList<String>(); String s = "ハハハハバハハハハバハハハ"; int w = 5; int n = 3; for (int i = 0; (i < n - 1) && (s.length() > w); i++) { String s1 = s.substring(0, w); String s2 = s.substring(w); if (s2.startsWith("゛")) { s1 = s1 + "゛"; s2 = s2.substring(1); } a.add(s1); s = s2; } if (s.length() > 0) a.add(s);

ITJack
質問者

お礼

ソースの方どうも ありがとうございます。 あとはパ等小さい〇を考えれば 良いだけですね。 ちょっとサンプルから考えてみます。

その他の回答 (3)

noname#217196
noname#217196
回答No.4

おそらく所定の分割位置の文字が濁点のほか、半濁点、促音、拗音、かな小文字、長音の場合についても同様に調整した分割位置の割り出しが必要でしょう。 濁点、半濁点だけなら、一旦全角文字に置換してから分割後、半角文字に置換しても目的を果たせるでしょうけど、例えばデュプリーヴィクセンジャックマンのような文字列の分割時には、拗音、かな小文字、促音、長音の泣き別れに課題を残しそうです。 正規表現を使わなくても所定の分割位置の文字の一文字後ろが濁点、半濁点、拗音、促音、かな小文字、長音の場合、これら以外の文字が見つかるまで分割位置候補を一文字ずつ前方または後方に探せばいいでしょう。

ITJack
質問者

お礼

全角から半角にすべて置換するソース作りました。 アドバイスありがとうございます。

ITJack
質問者

補足

アドバイスどうもありがとうございます。 分割前に文字を全角に置換して 分割後に半角に戻す考えは今でもございます。 バやピなどの文字以外は途中で分割されてしまっても構いません。 分割前に import java.text.Normalizer; import java.text.Normalizer.Form; Normalizer.normalize(半角カナ, Form.NFKC);で 文字を全角に変換して分割しようと思ってたのですが 結果に文字を半角カナに戻すソースを ご存じでしょうか??

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>4桁目が濁点のケースもあり6桁目が濁点のケースも >あるので濁点をヒットさせて分割方法を >変えなければと思い投稿させていただきました。 5文字で分解するのに4桁目にある濁点と3桁目の文字が分かれることがあるんですか? 文字列を分割するときに濁点とその前の文字を分けたくないって質問だと思ったんですけど。

ITJack
質問者

お礼

訂正 補足例であげた分割前文字列は以下になります。 分割前の15ケタの文字列 ハハハハバハハハハバハハハ

ITJack
質問者

補足

>5文字で分解するのに4桁目にある濁点と3桁目の文字が分かれることがあるんですか? ございません。 検証の結果、単純な2分割ですとIF文で対応出来るのですが 今回説明が分かりやすいように、2等分に分割する例を上げました。 今回、伝えたかった事は 3分割や分割区分が複数になる場合、IF文ですと条件が増えてしまうので なにか良い方法はないかなと思ったのですが・・・ うまく伝わらなくて申し訳ございません。 例えば5ケタ目が濁点のとき 6ケタと5ケタと4ケタで分割したとします。 そうしますと文字列の値によっては 5ケタで分割しようとした2つ目の配列にもし 濁点が含まれていた場合また条件を増やさなければいけなかったという事です。 例 分割前 ハハハハバハハハハハ       バハハハハハ 分割後  ハハハハバ        ハハハハハ       ゛ハハハ        という結果になってしまうのです。 かといって配列2の値を6ケタで区切ると 他の文字列の 配列2の値の7ケタ目に 濁点が含まれた場合濁点と文字の途中で 分割されてしまうので・・・ なにか他に方法がなければ アドバイス頂いた方法で考えて ベストアンサーとして打ち切りさせて頂きます。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

分割した後半部分の文字列先頭1文字が濁点だったら、前半部分の文字列最後の文字を後半部分の先頭に移すなり、後半部分の先頭の濁点を前半部分の文字列の最後に移したりすればよいだけでは?

ITJack
質問者

お礼

すいません。 勘違いしてました。 正規表現もしくは条件判定で、 ヒットさせるという事で しょうか?

ITJack
質問者

補足

文字列の値はどこに濁点が存在する かわからないのでそれですと 今回質問しなくて済んでしまいます。 4桁目が濁点のケースもあり6桁目が濁点のケースも あるので濁点をヒットさせて分割方法を 変えなければと思い投稿させていただきました。

関連するQ&A

専門家に質問してみよう