2010-11-05 21 views
6

Tengo un texto, por ejemplo:Agregar espacio después de cada cuarto signo +

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

Me gustaría agregar un espacio después de cada cuarto signo '+'.

Esto es porque si el texto es demasiado largo en la celda de la cuadrícula en mi página, simplemente se corta. Así que estoy pensando en simplemente envolver la cadena antes de enlazar los datos a la grilla.

He jugado con varios métodos de cadena, como obtener el IndexOf y agregar un espacio con Insertar, o usar un StringBuilder para hacer una cadena completamente nueva de la original, pero simplemente no puedo obtener el solución final ejecutándose.

Cualquier ayuda sería apreciada. Gracias.

+0

¿Cuál es exactamente tu problema? – codymanix

+3

Mantenga un conteo de la cantidad de signos + que pase. Cuando llegue al cuarto, agregue un espacio, ponga en cero el contador, enjuague y repita. –

+0

¿Su cadena siempre es este formato? Si es así, la solución es más simple y no requiere que busque el signo +. – Kendrick

Respuesta

6

Se podría utilizar 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)); 
+0

Decidí usar el enfoque LINQ. Gracias a todos. – TheFitGeekGirl

10

Usar una expresión regular:

Pattern pattern = Pattern.compile("([^+]*\\+){4}"); 
Matcher matcher = pattern.matcher(str); 
matcher.replaceAll("\1 "); 
+6

"pero luego él tendrá dos problemas" (le pregunté a keed) (¿o sí?) – jcolebrand

+1

@drachenstern: los dos problemas solo se refieren a cuando no sabes cómo crear la expresión regular correcta. Si eres un experto en expresiones regulares y no te importa el rendimiento, entonces las expresiones regulares no son un "segundo problema". Es así de simple. –

+0

@ Platinum Azure ~ el tipo que hace la pregunta NO es un experto en expresiones regulares, y ni siquiera sabe que una expresión regular resolverá el problema, ya que no preguntó si una expresión regular era el camino correcto. Cálmate o dame comentarios constructivos. Le estaba diciendo a @thejh con la menor cantidad de palabras posible que le está dando al chico un segundo problema (aprender y usar expresiones regulares) al resolver el primero. Porque el chico intentará y usará y se equivocará al usar una expresión regular la próxima vez. Entonces él tendrá tres problemas. (no es capaz de soportar el código existente) – jcolebrand

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 ] + "+"); 
} 
3

más fácil:

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

+1, corrigió su sintaxis de patrón de reemplazo para usar '$ 1' y usó una cadena literal con el símbolo' @ 'para escapar del patrón correctamente. –

0

Las expresiones regulares son todos muy bien, pero como alguien una vez dijo

Algunas personas, cuando se enfrentan con un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas.

¿Qué pasa con esta sencilla solución isntead:

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; 
      } 
     } 
    } 
+0

Lo anterior es en realidad Java, pero supongo que debería funcionar en C# – brain

1

Esta es la primera lo que viene a la mente. No es el más hermoso sin embargo.

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

Se podía utilizar la propiedad CSS word-wrap para romper la cadena con un grosor determinado ...

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

acaba de establecer CssClass="longString" a la columna en cuestión.

+2

+1 para la preservación de datos y solucionar el problema real; la visualización de los datos. – CodingWithSpike

Cuestiones relacionadas