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