facebook twitter hatena line email

「Unity/Csharp/文字操作」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(正規表現マッチ)
(検索)
 
(同じ利用者による、間の30版が非表示)
行1: 行1:
 +
==文字判定==
 +
<pre>
 +
string url = "";
 +
if (string.IsNullOrEmpty(url))
 +
{
 +
    Debug.Log("empty!!");
 +
}
 +
</pre>
 +
空文字はtrue判定される
 +
 
==文字の長さ==
 
==文字の長さ==
 
  String name = "abcdef";
 
  String name = "abcdef";
行5: 行15:
 
==文字の切り取り==
 
==文字の切り取り==
 
  String name = "abcdef";
 
  String name = "abcdef";
  name = name.Substring (name.Length - 2, 2); // ef
+
name = name.Substring(1, 2); // bc
 +
  name = name.Substring(name.Length - 2, 2); // ef
 +
 
 +
==文字繰り返し==
 +
string filter = new string('o', 10); // oooooooooo
  
 
==検索==
 
==検索==
  if (name.IndexOf("検索文字列") == -1) {
+
  if (name.IndexOf("検索文字列") > -1) {
    // no hit
+
} else {
+
 
     // hit
 
     // hit
 +
} else {
 +
    // no hit
 
  }
 
  }
 +
見つけた場合は 0 から始まるインデックスを返す。見つからなかった場合は-1
 +
===検索(指定文字数移行)===
 +
<pre>
 +
string name = "あいういお";
 +
int index = name.IndexOf("い", 2); // 3文字目以降で検索
 +
</pre>
 +
2つ目の"い"は、4番目だったので、-1して、indexには3が入る
  
==分割==
+
==検索その2==
name = "1234:2345";
+
<pre>
string[] names = name.Split(":"[0]);
+
string str = "あいうえお";
Debug.Log(names[0]); // 1234
+
string target = "いうえか";
Debug.Log(names[1]); // 2345
+
// 含まれる
 +
if (str.Contains(target))
 +
{
 +
    Debug.Log("match");
 +
}
 +
else
 +
{
 +
    Debug.Log("no match");
 +
}
 +
</pre>
 +
 
 +
==分割(配列へ)==
 +
<pre>
 +
name = "1234:2345";
 +
string[] names = name.Split(":"[0]);
 +
Debug.Log(names[0]); // 1234
 +
Debug.Log(names[1]); // 2345
 +
</pre>
 +
 
 +
==分割(Listへ)==
 +
<pre>
 +
name = "1234:2345";
 +
List<int> result = name
 +
    .Split(':')
 +
    .Select(a => int.Parse(a))
 +
    .ToList();
 +
</pre>
  
 
==分割(改行)==
 
==分割(改行)==
行25: 行72:
 
  string[] lines = str.Split(new []{"\r\n", "\r", "\n"}, StringSplitOptions.None);
 
  string[] lines = str.Split(new []{"\r\n", "\r", "\n"}, StringSplitOptions.None);
  
 +
==分割(1文字ごと)==
 +
foreach (var item in str.Select((n, index) => new { n, index }))
 +
{
 +
    Debug.Log(item.n);
 +
}
 
==小文字を大文字へ==
 
==小文字を大文字へ==
 
  name.ToUpper();
 
  name.ToUpper();
行30: 行82:
 
==大文字を小文字へ==
 
==大文字を小文字へ==
 
  name.ToLower();
 
  name.ToLower();
 +
 +
==最初の文字だけ大文字へ==
 +
System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str);
  
 
==.区切りの一番最後の文字列を取得==
 
==.区切りの一番最後の文字列を取得==
行44: 行99:
 
例:{"があるところから最後までを抜き出す
 
例:{"があるところから最後までを抜き出す
 
  json = json.Substring(json.IndexOf("{\""), json.Length - json.IndexOf("{\""));
 
  json = json.Substring(json.IndexOf("{\""), json.Length - json.IndexOf("{\""));
 +
 +
==置換==
 +
<pre>
 +
string str = "my name is taro";
 +
Debug.Log(str.Replace("taro", "jiro"));  // my name is jiro
 +
</pre>
 +
 +
<pre>
 +
string username = "jiro";
 +
Debug.Log($"my name is {username}.");
 +
</pre>
  
 
==初回検索の文字だけ置換==
 
==初回検索の文字だけ置換==
行58: 行124:
  
 
==初回検索の文字から検索==
 
==初回検索の文字から検索==
  Match matche = Regex.Match("hogepiyo", "^hoge");
+
  Match match = Regex.Match("hogepiyo", "^hoge");
  if (matche.Success)
+
  if (match.Success)
 
  {
 
  {
     Debug.Log(matche.Value); // hoge
+
     Debug.Log(match.Value); // hoge
 
  }
 
  }
  
==正規表現マッチ==
+
==半角判定==
string str = "hoge a456 piyo";
+
<pre>
Match matche = Regex.Match(str, "a[0-9]+");
+
using System.Text;
if (matche.Success) {
+
public class StrUtil
    Debug.Log(matche.Value); // a456
+
{
}
+
    // 最初の1文字だけ判定
 +
    public static bool IsHankaku(string str)
 +
    {
 +
        char[] chars = str.ToCharArray();
 +
        Encoding chk = Encoding.GetEncoding("shift_jis"); // shift_jisだと2でutf-8だと3
 +
        if (chars.Length >= 1) {
 +
            if (chk.GetByteCount(chars, 0, 1) == 1) {
 +
                return true; // 1byte
 +
            }
 +
        }
 +
        return false; // 2byte
 +
    }
 +
}
 +
</pre>
 +
Android(iosも?)の場合は半角でも2となるのでダメっぽい。
  
==a-z判定==
+
==全角を半角へ==
 
<pre>
 
<pre>
string str = "hoge";
+
    // 1文字を半角に
if (str.All(IsAlphabet)) { // true
+
    static public string ConvertToHalfWidth(string fullWidthStr)
}
+
    {
public static bool IsAlphabet(char c) {
+
        if (fullWidthStr.Length == 0) {
        return (c >= 'A' && c <= 'z') ? true : false;
+
            return fullWidthStr;
 +
        }
 +
        string halfWidthStr = null;
 +
        const int ConvertionConstant = 65248;
 +
        halfWidthStr += (char)(fullWidthStr[0] - ConvertionConstant);
 +
        return halfWidthStr;
 +
    }
 +
</pre>
 +
参照:http://koma2961.hatenablog.com/entry/2016/02/24/051156
 +
 
 +
==文字列リテラル==
 +
%sとかの置換のやり方
 +
string message = string.Format("({0}個以上は{1}をしてください。)", i, move);
 +
 
 +
==数字のフォーマットの置換==
 +
String.Format("数字{0:###.#}", 4);
 +
// 数字004.0
 +
String.Format("数字{0:f}", 5);
 +
// 数字5.00
 +
 
 +
==右から何文字抜き出し==
 +
<pre>
 +
public static string Right(string str, int len)
 +
{
 +
    if (str.Length <= len)
 +
    {
 +
        return str;
 +
    }
 +
    return str.Substring(str.Length - len, len);
 
}
 
}
 
</pre>
 
</pre>
参考:https://qiita.com/hotelmoskva_/items/77bdc61a592a69914287
+
参考:https://dobon.net/vb/dotnet/vb2cs/mid.html
 +
 
 +
==文字から数字だけ抜き出し==
 +
<pre>
 +
using System.Text.RegularExpressions;
 +
string str = Regex.Replace (name, @"[^0-9]", "");
 +
Debug.Log (str);
 +
</pre>

2023年11月12日 (日) 23:18時点における最新版

文字判定

string url = "";
if (string.IsNullOrEmpty(url))
{
    Debug.Log("empty!!");
}

空文字はtrue判定される

文字の長さ

String name = "abcdef";
name.Length; // 6

文字の切り取り

String name = "abcdef";
name = name.Substring(1, 2); // bc
name = name.Substring(name.Length - 2, 2); // ef

文字繰り返し

string filter = new string('o', 10); // oooooooooo

検索

if (name.IndexOf("検索文字列") > -1) {
    // hit
} else {
    // no hit
}

見つけた場合は 0 から始まるインデックスを返す。見つからなかった場合は-1

検索(指定文字数移行)

string name = "あいういお";
int index = name.IndexOf("い", 2); // 3文字目以降で検索

2つ目の"い"は、4番目だったので、-1して、indexには3が入る

検索その2

string str = "あいうえお";
string target = "いうえか";
// 含まれる
if (str.Contains(target))
{
    Debug.Log("match");
}
else
{
    Debug.Log("no match");
}

分割(配列へ)

name = "1234:2345";
string[] names = name.Split(":"[0]);
Debug.Log(names[0]); // 1234
Debug.Log(names[1]); // 2345

分割(Listへ)

name = "1234:2345";
List<int> result = name
    .Split(':')
    .Select(a => int.Parse(a))
    .ToList();

分割(改行)

using System;
string str = "test\r\ntest\r\ntest";
string[] lines = str.Split(new []{"\r\n", "\r", "\n"}, StringSplitOptions.None);

分割(1文字ごと)

foreach (var item in str.Select((n, index) => new { n, index }))
{
    Debug.Log(item.n);
}

小文字を大文字へ

name.ToUpper();

大文字を小文字へ

name.ToLower();

最初の文字だけ大文字へ

System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str);

.区切りの一番最後の文字列を取得

jp.co.example.hogehogeのhogehogeを取得する

int startindex = className.LastIndexOf('.') + 1;
string name = className.Substring(startindex, className.Length - startindex);

ヒアドキュメント

string str = @"hogehoge
hogehoge";

@をつけると改行があっても大丈夫

ある文字から最後までを抜き出す

例:{"があるところから最後までを抜き出す

json = json.Substring(json.IndexOf("{\""), json.Length - json.IndexOf("{\""));

置換

string str = "my name is taro";
Debug.Log(str.Replace("taro", "jiro"));  // my name is jiro
string username = "jiro";
Debug.Log($"my name is {username}.");

初回検索の文字だけ置換

using System;
using System.Text.RegularExpressions;
string str = "hogehoge";
string searchWord = "hoge";
string after = "piyo";
Regex re = new Regex(searchWord); 
ret = re.Replace(str, after, 1);
Debug.Log("ret=" + ret); // piyohoge

http://noriok.hatenadiary.jp/entry/2015/09/21/184424

初回検索の文字から検索

Match match = Regex.Match("hogepiyo", "^hoge");
if (match.Success)
{
    Debug.Log(match.Value); // hoge
}

半角判定

using System.Text;
public class StrUtil
{
    // 最初の1文字だけ判定
    public static bool IsHankaku(string str)
    {
        char[] chars = str.ToCharArray();
        Encoding chk = Encoding.GetEncoding("shift_jis"); // shift_jisだと2でutf-8だと3
        if (chars.Length >= 1) {
            if (chk.GetByteCount(chars, 0, 1) == 1) {
                return true; // 1byte
            }
        }
        return false; // 2byte
    }
}

Android(iosも?)の場合は半角でも2となるのでダメっぽい。

全角を半角へ

    // 1文字を半角に
    static public string ConvertToHalfWidth(string fullWidthStr)
    {
        if (fullWidthStr.Length == 0) {
            return fullWidthStr;
        }
        string halfWidthStr = null;
        const int ConvertionConstant = 65248;
        halfWidthStr += (char)(fullWidthStr[0] - ConvertionConstant);
        return halfWidthStr;
    }

参照:http://koma2961.hatenablog.com/entry/2016/02/24/051156

文字列リテラル

%sとかの置換のやり方

string message = string.Format("({0}個以上は{1}をしてください。)", i, move);

数字のフォーマットの置換

String.Format("数字{0:###.#}", 4);
// 数字004.0
String.Format("数字{0:f}", 5);
// 数字5.00

右から何文字抜き出し

public static string Right(string str, int len)
{
    if (str.Length <= len)
    {
        return str;
    }
    return str.Substring(str.Length - len, len);
}

参考:https://dobon.net/vb/dotnet/vb2cs/mid.html

文字から数字だけ抜き出し

using System.Text.RegularExpressions;
string str = Regex.Replace (name, @"[^0-9]", "");
Debug.Log (str);