2012-01-12 33 views
6

Tengo dos variables de cadena, ticker y detalle. Estoy tratando de imprimir las dos cadenas en una línea. Simplemente no funcionaría. He intentado tantas formas diferentes de hacer esto. Para excluir la posibilidad de una cadena no inicializada intenté imprimirlas en líneas diferentes ... esto funciona.Comportamiento extraño con cadenas java

Este ejemplo funciona ... excepto que la salida debe estar en una línea.

  System.out.println(ticker); 
      System.out.println(detail); 

Y la salida es:

IWM 
|0#0.0|0#0.0|0#-4252#386| 
GLD 
|0#0.0|0#0.0|0#-4704#818| 

Cuando trato de poner el resultado en una línea en cualquiera de muchas maneras, sólo obtengo la clave de pizarra ... la cadena de detalle es simplemente no impreso ... no para consolar o archivar. Éstos son algunos fragmentos de código de ejemplo que producen el mismo resultado:

Intento 1:

System.out.println(ticker.concat(detail)); 

Intento 2:

System.out.println(ticker+detail); 

Intento 3:

StringBuffer sb = new StringBuffer(); 
sb.append(ticker); 
sb.append(detail); 
System.out.print(sb.toString()); 

Intento de 4:

System.out.print(ticker); 
System.out.println(detail); 

En todos los intentos anteriores, me sale el siguiente resultado ... como si la parte de detalle se pasa por alto:

GOLD 
BBL 
SI 

Lo que podría ser la causa de estos síntomas? ¿Hay alguna manera de obtener las dos cuerdas impresas en una línea?

+1

No veo cómo se relacionan la primera salida y la última salida. No contienen lo mismo en absoluto. Probablemente no esté imprimiendo lo que cree que está imprimiendo. Intente hacer un SSCCE (http://sscce.org/). –

+0

sí, esto se ejecuta en tiempo real, por lo que las salidas son ligeramente diferentes, pero el formato es un ticker almacenado en ticker ... un detalle almacenado en la variable de detalle. – fodon

+1

¿Podría mostrarnos el contenido real de las cadenas 'ticker' y' detail'? Puede depurar el código y obtener el texto allí ... – everton

Respuesta

7

Esto podría ser más adecuado como un comentario, pero entonces yo no podría escribir el fragmento de código que necesito escribir

¿De dónde vienen las cuerdas? ¿Son de un archivo que podría contener algunos caracteres de control extraños? Si no está creando el String usted mismo, debe examinarlos para buscar retornos de carro verticales incrustados u otras rarezas. Hacer algo como esto, tanto para los detail y ticker Cuerdas:

for (int i=0; i<detail.length(); ++i) 
    System.out.println((int) detail.charAt(i)); 

y ver si le da nada en el rango no ASCII.

+1

que es un pensamiento interesante ... Voy a ejecutar la prueba. – fodon

+1

hay un montón de ceros ... Supongo que el sistema no elimina los ceros y supone que termina la cadena. Trabajaré en esa idea. ¿Hay una rutina de biblioteca estándar para deshacerse de los ceros finales? – fodon

+0

¡ASCII NUL definitivamente cuenta como rareza! Si puedes quitártelos antes de crear los objetos de Java String, apuesto a que tu problema desaparecerá. –

2

puede ser la primera cadena termina con un carácter "\ n", la nueva línea (avance de línea) ('\ u000A')

+0

Esa es mi suposición, es por eso que le pregunté el contenido real de las cuerdas ... – everton