• ベストアンサー

String.Insertで文字数ではなく、バイト数で指定したい

String.Insertの第1引数でバイト数を指定したいのですが、 何か方法はありますでしょうか? "ABCDE".Insert(2, ",") → AB,CDE "あいうえお".Insert(2, ",") → あい,うえお となるところを "あいうえお".Insert(2, ",") → あ,いうえお としたいのですが、代替のメソッドが無いように思えます。 環境はVB2005です、よろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Shift-JISのByte列に変換して挿入を行うといった処理が必要なのかも # S-JISで表現できないUnicode文字がある場合別途対処が必要でしょう Function MyInsert(ByVal ss as String, ByVal nLen as Integer, _   ByVal sInsert ) as String   dim sb as new System.Text.StrngBuilder   dim enc as System.Text.Encoding   dim buf as Byte()   enc = System.Text.Encoding.Default   buf = enc.GetBytes( ss )   sb.Append( enc.GetString( buf, 0, nLen ) )   sb.Append( sInsert )   sb.Append( enc.GetString( buf, nLen, buf.Length - nLen ) )   return sb.ToString() End Function # エラー処理など必要な処理を追加してください

lockpack
質問者

お礼

:n Jy gIトH壁dヒ^ェS・エS ヒx ゥ ク洌「oリDAチI・<薦M膠ォ嘘ヒカ |

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Stringというか,.NET Frameworkの文字型はUTF-16ですから,「バイト数 \ 2」でInsertに使う位置になります。

lockpack
質問者

お礼

J 少コ>ヤ・ka ョエ皰Yk・熙EN・」^コLzテ孺ムT% /.ハトe

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【C++/CLI】String型文字列の位置を指定して値を取り出す

    VC++2005、.NET2.0、C++/CLIにてWindowsアプリを作成しています。 String型に格納された文字列の、位置を指定して値を取り出すには、 どのような方法を用いればよいのでしょうか? 基本的な質問で申し訳ありませんが、ご教示よろしくお願い致します。 例) String^ st = "abあいcde"; //四番目の値を取り出す⇒「い」を取り出す

  • java String[]

    メソッドを作成します 引数で String[] をもらいその個数を調べます その個数分の String[] を確保して 操作した文字列をセットして String[] の先頭ポインタをreturn します String[] の個数を調べる方法と その数だけ配列の確保の方法 を調べていますがよく分かりません よろしくお願いします

  • .NET Stringからバイト数を取得する。

    初歩的な質問で申し訳ありません。 Stringから桁数ではなくバイト数を 取得する方法を教えてください。 Dim a As String a = "00あ" とあった場合、 aから4という結果がほしいです。 よろしくお願いします。

  • String配列とHashMap

    メソッドの引数の数がとても多いので、String配列かHashMapにまとめて、値を渡すことになりました。 どちらを使うかなのですが、私の記憶だとString配列とHashMapの違いを次のように認識してるのですが、調べても答えが見つかりません。合ってるか教えてください。 String配列は、インデックスを検索しつつ値を取得してるので、インデックスの大きい番号ほど、値取得時の処理に時間を使う。HashMapは、特別な検索方法(?)で検索してるので、値取得時の処理に、時間をかけずにすむ。 なので、メソッドの引数として使うのはHashMapの方がよい。 メソッドの引数という性格上、要素数を固定しなくてもいいHashMapの方が使いやすいと思ってるのですが、現場のリーダーさんの認識とずれちゃってます。説得したいので、この辺りのことが解説されているサイトがありましたら、合わせて教えていただけると嬉しいです。

    • ベストアンサー
    • Java
  • String型をbyte型へ

    MACアドレス(16進数) 00:00:00:00:00:01 これが引数で指定される。 String str = args[0]; というものがありまして(String型)、 そのコロン:で分けられた数字部分のみをバイト配列に格納したいのですが、そのうまい方法がわかりません。お助けください。 byte mac_addr[0] = Byte.parseByte("0x".concat(str.substring(0,1))); なんて事もしてみましたが、NumberForamtExceptionが 表示されます。(コンパイルは出来る。) うむ、分からない。どこが悪いのだろう??? 以上

    • ベストアンサー
    • Java
  • String型の値にスラッシュをつけて表示させたい。

    VB2005環境です。 渡ってきたString型の数字を、スラッシュをつけた上で、 テキストボックスに表示したいと思っています。 具体的には、 Dim YMD as string ="200709" Me.txtbox1.text=YMD これだと、200709と表示されてしまいますので、スラッシュを つけて、2007/09にしたいのです。 Formatを使うのだろうと思い、 Me.txtbox1.text=Format(YMD,"0000/00") としてみると、エラー。 スラッシュがつくからDateになるのかなと、 Me.txtbox1.text=CDate(Format(YMD,"0000/00")) でもダメでした。 Formatは、第二引数に指定した形式に直すものだと思っていたの ですが、String型のデータは直せないのでしょうか…? 問題点と、解決方法を教えていただけないでしょうか。 よろしくお願いします。

  • ファイル内の1行(レコード)から指定バイト数だけを読込みたい。

    ファイル内の1行(レコード)から指定バイト数だけを読込みたい。 // ファイルオープン FileInputStream fis = new FileInputStream(file); InputStreamReader isr; isr = new InputStreamReader(fis); BufferedReader result = new BufferedReader(isr); while (result.readLine() != null) { // 末尾まで移動する } 上記のようにBufferedReaderを使い、ファイルを読み込んでいるのですが、 ファイル内の1行ごとに指定バイト数だけを読み込みたいです。 readLineメソッドでは1行を全部読み込んでしまうため出来ません。 (readLineで一度他の変数へ入れてからというのは無しです。読込む時点で指定バイト数としたいのです。) readメソッドでは、行ごとの指定って出来ないですよね・・・。 ファイル操作系の知識が少ない為、なかなか探せません。 読み込む時点で1行の取得レコード長に制限値を設ける方法はないでしょうか? また、取得レコード長が制限値を超えた場合、エラーメッセージを出したいのですがその判定とかも可能でしょうか? どうかよろしくお願いします。 ロジックとしてはこんな感じにしたいです。 while(ファイルの終端まで行を読み込む){   // 読み込んだ1行が2048バイト未満かを判定   if(読み込んだ1行が2048バイトを超えている場合){     エラーメッセージを出力する(処理はそのまま続行)   }   1行から2048バイト未満を取得 }

    • ベストアンサー
    • Java
  • VB6で、指定バイト数を超えた場合はその直前に。

    VB6で、最高文字数を指定するとともに、そのバイト数を超えた場合、超える直前の状態を出力する文字列とする、という処理を考えています。 最大のバイト数を116とすると、全角なら58文字までですが、 57文字まで全角で入力し、次の一文字を半角にする。 そして最後に全角を1文字打つと、116バイトを超えてしまうので、 出力文字は半角のところまでとする。 という形です。 Public Function GetStrForLimitByte(cs As String, size As Long) Dim i As Long Dim p As Long Dim limitStr As String Dim temp As String Dim parts() As String limitStr = "" ' 文字列のバイト数が指定バイト数以下は文字列をそのまま返す If (LenB(cs) <= size) Then cs = cs Else p = Len(cs) For i = 1 To p parts(i) = Mid(cs, i, 1) '1文字ずつ連結 temp = limitStr + parts(i) If (LenB(temp) > size) Then limitStr = limitStr Else limitStr = limitStr + parts(i) End If Next End If End Function すると、parts(i) = Mid(cs, i, 1)のところで「インデックスが有効範囲でありません。」 というメッセが出てしまいます。 なぜでしょうか? ご回答お待ちします、お願いします。

  • String typeの引数をつかって 変数はつくれますか?

    いつもお世話になっております。 以下のように、引数を使って、変数をていぎしたいのですが。。。 public static void main(Stirng[] arg){ String hikisuu = "サンプル"; method(hikusuu); } public static void method(String hikisuu){ int hikisuu = 5; } java でこのようなことは可能でしょうか? (実際やったらエラーが出ました...) ほかの方法で、これと同じようなことを実現でくる方法はありますでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • ASP.NETの質問なのですが、文字列の引き算は可能でしょうか?

    ASP.NETの質問なのですが、文字列の引き算は可能でしょうか? dim a as string = "abcde" dim b as string = "cde" dim c as string c = a- b このようなコードでcの答えをabとして表示できるでしょうか? ご存知の方がいらっしゃりましたらアドバイスお願いいたします。

このQ&Aのポイント
  • 大型エアシリンダーのコンプレッサーの能力を計算する方法についてご質問いただきました。
  • エアシリンダーのサイズやストローク、エアー圧の要件から必要なコンプレッサーの能力を算出します。
  • 要件に基づいた計算結果から、3Hpのコンプレッサーでは不足するため、5Hpのコンプレッサーが必要です。
回答を見る