今回のテーマ
今回は2文字以上で配列に分割する方法を紹介します。
1文字であれば、String方のSplitで出来るのですが、2文字以上は出来ないんですよね。
この記事では、そのようなお悩みの方に参考になると思います。
それでは、どうぞ!
正規表現の基本はコチラ
-
【C#】csharpで正規表現(Regexクラス)について学ぼう!!パターンマッチングを一気に学ぶ!
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 正規表現マス ...
続きを見る
String型のSplitメソッド
この記事を見て頂いている方は、String型のSplitメソッドの使い方は知っていると思うので、
参考となるソースコードを載せて、簡単に説明してしまいます。
下記のように使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; class Program { static void Main(string[] args) { string text = "Rockman|Rollchan|Fireman|Iceman"; var robotarray = text.Split('|'); foreach(var robot in robotarray) { Console.WriteLine(robot); } } } |
出力結果
Rockman
Rollchan
Fireman
Iceman
この例では、「|」で区切られているロボット名の文字列を配列にするためにSplitを使用しています。
Splitメソッドの引数をchar型の「|」にすることで、配列の各要素に分割出来ています。
では、下記のように区切られていた場合はどうでしょう。
1 |
string text = "Rockman||Rollchan||Fireman||Iceman"; |
2文字の「||」で区切られています。文字列のSplitメソッドで指定してみましょう。
1 |
var robotarray = text.Split('||'); |
下記のように怒られてしまいました。
エラー CS1012 文字リテラルに文字が多すぎます
開き直って、今までのように「|」を指定してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using System; class Program { static void Main(string[] args) { string text = "Rockman||Rollchan||Fireman||Iceman"; var robotarray = text.Split('|'); foreach(var robot in robotarray) { Console.WriteLine(robot); } } } |
出力結果
Rockman
Rollchan
Fireman
Iceman
空白が追加されてしまいました。
この方法ではいけない理由が分かったと思うので、これから紹介するRegexクラスを使用した方法でこの問題を解決しましょう。
Regexクラスを使用したやり方
早速、ソースコードを下記に書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string text = "Rockman||Rollchan||Fireman||Iceman"; var robotarray = Regex.Split(text,@"\|\|"); foreach(var robot in robotarray) { Console.WriteLine(robot); } } } |
出力結果
Rockman
Rollchan
Fireman
Iceman
このソースコードのポイントは下記の3つです。
using System.Text.RegularExpressionsを指定する
RegexクラスのSplitメソッドを使用する
引数は2つ指定し、第1引数には対象の文字列。第2引数には分割対象の文字列を指定する。因みに正規表現。
この方法をマスターすれば、2文字以上を対象にしたSplitで悩むことはなくなると思います。
因みにRegexクラスは正規表現なので、下記のような文字列でも分割することが可能です。
1 |
string text = "Rockman|1Rollchan|2Fireman|3Iceman"; |
中々ないと思いますけど、「|」の後ろに番号がついてます。
このような場合は下記のようにしてみるといいかもしれませんね。正規表現は色々な方法があるので、あくまでも例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string text = "Rockman|1Rollchan|2Fireman|3Iceman"; var robotarray = Regex.Split(text,@"\|[1-99]"); foreach(var robot in robotarray) { Console.WriteLine(robot); } } } |
出力結果
Rockman
Rollchan
Fireman
Iceman
まとめ
今回はSplitメソッドで分割する文字列が2つ以上の場合、どのようにすればいいか解決しました。
Regexクラスに関しては、他にも沢山触れていきたいと思っているので、どんどん記事を書いていこうと思っています。
以上、最後まで読んで頂きありがとうございました。
他の記事はこちら