Editor de líneas [JAVA]

bornex

Buenas, como siempre, cuando ya no puedo más vengo aquí a ver si alguien me echa una mano :P.

Estoy haciendo una práctica de Estructuras de Datos, el problema es el siguiente:

Tengo que hacer un intérprete de líneas con comandos. El texto se va a tratar mediante una LinkedList<String> y con un ListIterator<String>.

Hay un método que inserta en el texto todas las líneas que haya hasta el comando de edición siguiente. Si
existe una línea actual establecida, cada línea se insertará antes de dicha línea actual. De lo
contrario, cada una de las líneas se insertan al final del texto, considerando como línea actual la
línea ficticia justo después de la última línea del texto.

Bien el test es el siguiente:

 @Test   
public void testSetLineNumber() { editor.interpret("$Insert"); editor.insert("c"); editor.insert("d"); editor.setCurrentLineNumber(1); editor.insert("x"); String actual = editor.interpret("$Done"), expected = " c\n x\n> d\n"; assertEquals(expected, actual);
}

Las barras simbolizan los espacios en blanco que debe de haber.

...es decir, primero insertamos ///c\n, luego ///b\n, establecemos el iterador current en la posición 1 y le ponemos un símbolo de mayor > que índica cual es la línea actual, y finalmente insertamos ///x\n. Debería quedar tal que así:

///c
///x
//d

Ahora os pongo como he intentado hacer el método para insertar y establecer el iterador:

protected void insert(String string) {
		if(string.length() > 80)
			throw new RuntimeException(LINE_TOO_LONG);
		
	if(current.nextIndex() == 0){
		text.add("   " + string + '\n');
	}
	else{
		text.add(current.nextIndex(), "   " + string + "\n>");
	}
}

protected void setCurrentLineNumber(int i) {
	if(i > text.size()-1)
		throw new RuntimeException(M_TOO_LARGE);
	current = text.listIterator(i);
}

... y también mi método done(), que acaba la ejecución del programa y devuelve el texto en cuestión; si el iterador no está establecido, considerando como línea actual la línea ficticia justo después de la última línea del texto :

protected String done() {
		String salida = "";
		
	for (Iterator<String> iterator = text.iterator(); iterator.hasNext();) {
			String type = (String) iterator.next();
			salida += type;
	}
	
	if(current.nextIndex() == 0){
		salida += ">  \n";
	}
	return salida;
}

... con estos métodos me hace "casi" lo que quiero que haga, pero falla una cosa, la salida es la siguiente:

///c
///x
///d

... me introduce un espacio en blanco de sobra :'( en la letra d y el test no lo pasa.

La pregunta es: ¿cómo hago para que me ponga solo 2 espacios en blanco? ¿en qué método lo hago?

Se que es un tocho post, pero estoy amargado, llevo 2 días sin conseguir resultados, y no se me ocurre nada, espero haberme explicado con claridad y a ver si alguien es capaz de echarme una mano, creo que es una duda estúpida pero no se como arreglarlo.

Un saludo.

Usuarios habituales

  • bornex