Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在每四个+之后添加空格;签名_C#_Asp.net - Fatal编程技术网

C# 在每四个+之后添加空格;签名

C# 在每四个+之后添加空格;签名,c#,asp.net,C#,Asp.net,我有这样一个文本,例如: “A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16” 我想在每四个“+”号后面加一个空格 这是因为如果我的页面中网格单元格中的文本太长,那么它就会被简单地切断。所以我想在将数据绑定到网格之前简单地包装字符串 我已经尝试过几种字符串方法,比如获取IndexOf和使用Insert添加空格,或者使用StringBuilder在原始字符串的基础上创建一个全新的字符串,但是我无法运行最终的解决方案 任何

我有这样一个文本,例如:

“A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16”

我想在每四个“+”号后面加一个空格

这是因为如果我的页面中网格单元格中的文本太长,那么它就会被简单地切断。所以我想在将数据绑定到网格之前简单地包装字符串

我已经尝试过几种字符串方法,比如获取IndexOf和使用Insert添加空格,或者使用StringBuilder在原始字符串的基础上创建一个全新的字符串,但是我无法运行最终的解决方案

任何帮助都将不胜感激。 谢谢。

使用正则表达式:

Pattern pattern = Pattern.compile("([^+]*\\+){4}");
Matcher matcher = pattern.matcher(str);
matcher.replaceAll("\1 ");
string text=“A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16”;
string[]parts=test.Split('+');
StringBuilder输出=新的StringBuilder();
对于(int i=0;i
您可以使用LINQ:

string input = "A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16";

string final = string.Join(
    "+", 
    input
        .Split('+')
        .Select( (s, i) => (i>0 && i%4==0) ? " "+ s : s));
更容易:

input = Regex.Replace(input, @"((?:[\w_]+\+){4})", "$1 ");

正则表达式都很好,但正如有人曾经说过的那样

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题

这个简单的解决方案是什么

    String testString = "A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16";
    StringBuilder buffer = new StringBuilder(testString);

    int plusCount = 0;
    for (int i=0; i<buffer.length(); i++) {
        if (buffer.charAt(i) == '+')  {
            plusCount++;
            if (plusCount == 4) {
                buffer.insert(i+1, ' ');
                i++;
                plusCount=0;
            }
        }
    }
String testString=“A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16”;
StringBuilder缓冲区=新的StringBuilder(testString);
int pluscont=0;

因为(inti=0;i这是我第一次想到的,但不是最美的

var str = "A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16";
        var strings = str.Split(new [] {'+'});
        var builder = new StringBuilder(strings[0]);
        for(var i = 1;  i< strings.Length;i++)
        {
            builder.Append(i%4 == 0 ? "+ " : "+");
            builder.Append(strings[i]);
        }
var str=“A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16”;
var strings=str.Split(新[]{'+'});
var builder=新的字符串生成器(字符串[0]);
for(var i=1;i
您可以使用该属性在某个宽度处断开字符串

td.longString {
  max-width: 150px;
  word-wrap: break-word;
}

只需设置
CssClass=“longString”
到有问题的列。

那么你的问题到底是什么?记下你通过的+号的数量。当你到达第四个时,添加一个空格,将计数器归零,冲洗并重复。你的字符串总是这种格式吗?如果是这样,解决方案更简单,不需要你扫描+号。我考虑过使用计数器,但我希望有一个更干净的解决方案。确保你这样做:myStr=myStr.Insert(index,”);在我C#职业生涯的一开始,我忽略了这样一个事实,即Insert不修改原始字符串,只单独返回修改过的字符串。“但是他会有两个问题”(我保持我保持)(或者我保持?)@drachenstern:这两个问题只指当你不知道如何制作正确的正则表达式时。如果你是一个正则表达式专家,你不关心性能,那么正则表达式就不是“第二个问题”.就这么简单。问题是C#的,答案是Java:P@drachenstern:天哪,我们今天很敏感。我不是说你在这个案子中错了,因为你是完全正确的(也许我应该强调一下,所以请接受我的道歉).我是说,断言任何使用regex的人都会有两个问题是错误的和不公平的,有时人们会把这句话当作一个时髦词来使用,这让我很恼火。是的,一开始看起来你只是在说一个时髦词,但我现在可以看出你实际上可以支持它。我不确定是否要告诉我“滚开”但是,我不确定我是否感激远程调用。如果这个答案让OP想学习正则表达式,那么它肯定是最好的答案。+1用于数据保存,并解决了真正的问题:数据的显示。我决定使用LINQ方法。谢谢大家。+1,修复了替换模式语法,使用
$1
并使用带有
@
符号的逐字字符串正确转义模式。
td.longString {
  max-width: 150px;
  word-wrap: break-word;
}