我有这样的文字例如:
“A01 + B02 + C03 + D04 + E05 + F06 + G07 + H08 + I09 + J10 + K11 + L12 + M13 + N14 + O15 + P16”
我想在每个第四个'+'符号后添加一个空格。
这是因为如果文本在我页面的网格单元格中太长,那么它就会被切断。所以我想在将数据绑定到网格之前简单地包装字符串。
我玩了几个字符串方法,比如获取IndexOf和使用Insert添加空格,或使用StringBuilder从原始字符串中创建一个全新的字符串,但我无法获得最终结果解决方案正在运行。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:10)
使用正则表达式:
Pattern pattern = Pattern.compile("([^+]*\\+){4}");
Matcher matcher = pattern.matcher(str);
matcher.replaceAll("\1 ");
答案 1 :(得分:6)
您可以使用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));
答案 2 :(得分:6)
你可以使用CSS word-wrap属性来破坏特定宽度的字符串......
td.longString {
max-width: 150px;
word-wrap: break-word;
}
只需将CssClass="longString"
设置为相关列。
答案 3 :(得分:3)
更容易:
input = Regex.Replace(input, @"((?:[\w_]+\+){4})", "$1 ");
答案 4 :(得分:2)
string text = "A01+B02+C03+D04+E05+F06+G07+H08+I09+J10+K11+L12+M13+N14+O15+P16";
string[] parts = test.Split( '+' );
StringBuilder output = new StringBuilder( );
for( int i = 0; i < parts.Length; i++ )
{
if( i%4 == 0 )
{
output.Append( " " );
}
output.Append( parts[ i ] + "+" );
}
答案 5 :(得分:1)
这是我想到的第一个。虽然不是最美丽的。
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]);
}
答案 6 :(得分:0)
正则表达式都很好,但正如有人曾经说过的那样
有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
这个简单的解决方案怎么样呢?
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;
}
}
}