比如我有一个字符串string str = "あいさつ55挨拶abcd";我想要把字符串中的日文挑出来进行处理(这部分已实现),数字和字母不处理,处理后 我还要拼回原来的字符串,也就是结果应该是:"アイサツ55アイサツabcd",数字和字母的位置不变。字符串是否有字母或者数字以及字母和数字的位置都不确定,我想问的就是用什么方法把日文提出来,又如何放回去呢。各位有什么好的方法,请赐教。

解决方案 »

  1.   

    我想要把字符串中的日文挑出来进行处理(这部分已实现),
    正则的话直接replace
      

  2.   

    string变成数组,取的时候标记,转换完了按照key值放回去
      

  3.   


    void Main()
    {
    string str = "あいさつ55挨拶abcd";
    str=Regex.Replace(str,@"[^\da-zA-Z]",delegate (Match m)
    {
      switch(m.Value)
    {
      case "あ":
      return "ア";
      break;
       case "い":
      return "イ";
      break;
       case "さ":
      return "サ";
      break;
      //其他以此类推 我想你懂的 我就不一一列出了
      default:
      return "";
      break;
    }
    });
    Console.WriteLine(str);

    }
      

  4.   

    to q107770540:感谢回复,这个方法不可行,比如日文汉字 “挨拶” 就不能按照您的方法转化了,日文的转换我有写好的方法,我是想把 日文 提出来 调用我的方法转化,然后再拼接回去。
      

  5.   


    你转换过程不说,,谁又知道  你转换后的字符是如何排列的,有什么规律,如何重组?replace 是最好的方法  直接替换  不用考虑重组问题你不用。。晕
      

  6.   

    既然你有现成的方法  直接在5楼的委托内调用此方法  传入处理前的字符串:m.Value返回处理后的字符串 不就OK了?我只是给你个思路..
      

  7.   

    很想知道你是怎么提出日文的...
    如果是正则的话string ss = "";//原文字
                Regex r = new Regex(@"匹配日文的正则");
                MatchCollection mc = r.Matches(ss);
                foreach (Match m in mc)
                {
                    string s = m.Groups[0].Value.ToString();//匹配的字符串
                      string news="";//对s进行文字处理
                    ss.Replace(s,news);//替换
                }
      

  8.   

    To fdh120:
    我是用正则提出来的。 Regex.Replace(Kanji, @"[\u0800-\u9fa5]", "-").TrimEnd()这个可以把汉字或者假名的地方用"-"替换掉,问题是不知道怎么组合回来。
      

  9.   

    既然已经有了提出日文的处理方法,不妨考虑先将原先的字符串转为List,List的各项依次放置,日文,其它字符,日文,其它字符...,有了这个List后,就可以将日文取出组成一个数组,以作转换处理使用,取出后的List项变为"",待转换完毕后(顺序保持不变),再遍历List,若等于空字符串,则从日文数组中取出一项替换之。最后将List逐项拼接,变成字符串。
      

  10.   

    To q107770540 & fdh120:使用 Match 方法一次只能循环一个字符,这样就会造成转化不准确,我需要按照一个词来转换,所以我一次性的需要把一段日文都提出来
      

  11.   


            private void button1_Click(object sender, EventArgs e)
            {
                string str = "あいさつ55挨拶abcd";
                string temp1 = Transfer(str);            string str2 = "5あい5さつ55挨拶ab挨拶cd";
                string temp2 = Transfer(str2);
            }        public string Transfer(string str)
            {
                string stReturn = string.Empty;
                string stTemp = string.Empty;
                Regex reg = new Regex("[\\d]|[a-zA-Z]");
                for (int i = 0; i < str.Length; i++)
                {
                    if (reg.IsMatch(str[i].ToString()))
                    {
                        if (stTemp != "")
                        {
                            stReturn += GetPianJia(stTemp); 
                        }
                        stReturn += str[i].ToString();                  
                        stTemp = string.Empty;
                    }
                    else
                    {
                        stTemp += str[i];
                    }
                }
                return stReturn;
            }        public string GetPianJia(string str)
            {
                return "你的偏甲名";
            }
      

  12.   

    To:chinaicm是我要的结果,非常感谢。