- PR -

文字列を分割してそこに区切り文字を含めるには

1
投稿者投稿内容
かずひろかず
常連さん
会議室デビュー日: 2008/07/01
投稿数: 24
投稿日時: 2009-04-01 18:21
こんにちは。.NET初心者です。

今、とあるプログラムを作っているのですが、文字列を分割して、配列に区切り文字を
含めたいのですが、どのようにやればよろしいのでしょうか。

-------------------------------------------

Dim text As String = "こんにちは。今日は、快晴です。"
Dim separator As String() = New String(){"、", "。"}
Dim result() As String
result = text.Split(separator, StringSplitOptions.None)

'ここで区切り文字を挿入する処理を行う

' このようにしたい
'
'  結果 ( result )
'   こんにちは
'   。
'   今日は
'   、
'   快晴です
'   。
'

-------------------------------------------
このようにすればできると思うのですが、肝心の区切り文字をいれる方法が思いつきません (-_-;)

どなたかご教授願います。

あと、関係ないことで申し訳ないのですが、私が書いたコードは「きれい」ですか?

※修正 textであるべき部分がStringとなっていたのを修正、あとその他


[ メッセージ編集済み 編集者: .NET初心者 編集日時 2009-04-01 22:07 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-04-01 18:41
引用:

.NET初心者さんの書き込み (2009-04-01 18:21) より:

今、とあるプログラムを作っているのですが、文字列を分割して、配列に区切り文字を
含めたいのですが、どのようにやればよろしいのでしょうか。


(今のままの実装で付け加えるならですが) 元の文字列をそれぞれ配列に区切られた文字数で左から順番に数えると区切られた対象となった文字に当たります。 単純にそれを文字結合してやれば良いですね。

Split メソッドを使った時点で選択肢は狭められます。 たとえば IndexOf + Substring で自分で取り出した方が処理的には二度手間にならずに済みます。

引用:

あと、関係ないことで申し訳ないのですが、私が書いたコードは「きれい」ですか?


(同じことを実現させるコードという意味ではなく、見た目がきれいかどうかで考えるなら 「普通」 といった印象です。 このソースコードと同等のことであれば誰が書いても同じようなものになるのではないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かずひろかず
常連さん
会議室デビュー日: 2008/07/01
投稿数: 24
投稿日時: 2009-04-01 19:02
じゃんぬねっとさん、ありがとうございます。
関係ない質問にも答えてくれてとても感謝しております。
じゃんぬねっとさんが提示してくださった方法で試してみたいと思います。
本当にありがとうございました。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-04-01 21:27
提示されているコードはコンパイル通りますか?
下記の様にしないと通らないと思いますが。

コード:
Dim text As String = "こんにちは。今日は、快晴です。"
Dim separator As String() = New String() {"、", "。"}
Dim result() As String

result = text.Split(separator, StringSplitOptions.None)


仰っている事をやりたいなら下記の感じでどうでしょうか。

コード:
Dim text As String = "こんにちは。今日は、快晴です。"

text = System.Text.RegularExpressions.Regex.Replace(text, "[、。]", Environment.NewLine & "$&" & Environment.NewLine)

Console.WriteLine(text)     ' 末尾の改行が入るけど
Console.ReadLine()

' 配列に入れたいなら
Dim result() As String = text.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)

For Each s As String In result
    Console.WriteLine(s)
Next
Console.ReadLine()

かずひろかず
常連さん
会議室デビュー日: 2008/07/01
投稿数: 24
投稿日時: 2009-04-01 22:03
Kingさん、返答ありがとうございます。
textと書くのを忘れていましたm(_ _)m
ご指摘ありがとうございます。

正規表現を使った方法もあるのですね。
試してみます。
ありがとうございました。
Algol
会議室デビュー日: 2007/10/19
投稿数: 2
投稿日時: 2009-04-03 21:05
この結果にしたいだけなら単純に置換でも良いのではとか思います。
コード:
For Each item As String In separator
    text = text.Replace(item, vbCrLf & item & vbCrLf)
Next



ちょっとひねくれた方法ならこんなのもあり?(VB2008限定)
ただし、区切り対象文字が1文字の場合のみ
コード:
Dim separator() As Char = New Char() {"、"c, "。"c}
text = New String(text.ToCharArray().SelectMany(Function(charItem) If(separator.Contains(charItem), vbCrLf & charItem & vbCrLf, charItem)).ToArray())

かずひろかず
常連さん
会議室デビュー日: 2008/07/01
投稿数: 24
投稿日時: 2009-04-03 21:36
Algolさん、返答ありがとうございます。
いろいろ試してみたいと思います (^^ゞ
1

スキルアップ/キャリアアップ(JOB@IT)