【问题标题】:How to delete every 2nd character in a string?如何删除字符串中的每个第二个字符?
【发布时间】:2012-10-31 19:51:42
【问题描述】:

如何删除字符串中的每个第二个字符?

例如:

3030313535333635  -> 00155365
3030303336313435  -> 00036145
3032323437353530  -> 02247550

字符串总是 16 个字符长,结果总是 8 个字符长 - 被删除的字符总是 '3' - 不要问为什么 - 我没有想到这个疯狂的源数据.

【问题讨论】:

  • 迭代字符串并获取每个替代字符并构造一个字符串并丢弃其余部分。
  • 我知道为什么:左边的字符串是成对的十六进制数字,代表右边字符的 ASCII 码。你应该做的是获取成对的字符,将它们解析为十六进制,然后从结果中构建一个字符串。

标签: c# .net performance linq


【解决方案1】:

试试这个从字符串中获取每个其他字符:-

 var s = string.Join<char>("", str.Where((ch, index) => (index % 2) != 0));

【讨论】:

  • 不错但是 (index % 2) == 0 应该是 (index % 2) != 0
  • @amit_g:- 谢谢阿米特。更新了我的答案!
  • @RahulTripathi:为什么string.Join("", seq) 可以string.Concat(seq)
  • 我认为两者都可以执行任务,但我更喜欢 string.Join。使用有什么问题请指正?
【解决方案2】:
String input = "3030313535333635";
String result = "";
for(int i = 1; i < 16; i +=2 )
{
    result += input[i];
}

【讨论】:

  • 你让StringBuilder伤心:(
  • 我想过,但后来我想“嘿,它只有 8 个字符”;)
  • 没关系,很高兴看到一个好的老式循环赢得了 Linq 的改变 :)
【解决方案3】:

你可以使用这个知名类System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary :)

string str = "3030313535333635";
var hex = System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary.Parse(str);
var newstr = Encoding.ASCII.GetString(hex.Value);

【讨论】:

  • @pst 查看 BenVoigt 的评论
【解决方案4】:

使用StringBuilder 创建字符串会节省资源

string input = "3030313535333635";
var sb = new StringBuilder(8); // Specify capacity = 8
for (int i = 1; i < 16; i += 2) {
    sb.Append(input[i]);
}
string result = sb.ToString();

【讨论】:

    【解决方案5】:

    Java 语言代码

    String input= "3030313535333635"
    String output="";
    
    for(int i=1;i<input.length();i=i+2)
    {
        output+=input.charAt(i).toString();
    }
    System.out.println(output);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多