Spezialfrage zu Strings

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
wie bekomme von einem solchen String

Code:
 1.     Zeile mit Text
 2.     
 3.     3. Zeile hat wieder Text  
 4.
 5.
 6.     In Zeile 6 steht wieder was

ein solches Ergenis



Code:
 1.     1.Zeile hat sich nicht verändert
 2.     3. Zeile ist jetzt in der zweiten Zeile
 3.
 4.
 5.     6.Zeile steht jetzt in Zeile 5

Alle Leerzeilen sollen also eine Zeile höher gerückt werden. Ich habe es mit den verschiednen String Methoden und regex versucht aber es klappt nicht ;(
 
hier die Methode:

Code:
/**
* es kann davon ausgeangen werden dass texte immer nach dem folgenden Schema "reinkommen" 
*   für neue Zeilen sind "\n" enthalten. Sofern mind. 1 Leerzeile vorhanden soll der nachfolgende Text um 1 Zeile
*   nach oben rücken
*
*  Text in 1.Zeile
*  Text in 2.Zeile
*  
*
*  Text in 5.Zeile
*
*
*
*  Text in 9.Zeile
**/
public static String replaceText (final String text){
    
    String resultOutput="";
    String emptyRowRegex = "\\s+";
    
    
    return resultOutput;
  }


Jo das ist im PRinzip das Grundgerüst, alle meine bisherigen Versuche bringen wohl nichts die hier zu posten. Ist nur Müll.
Ich dachte halt sobald eine leere Zeile über einen Regex gefunden wird, soll die nachfolgende 1 höher. Aber ich glaube fast, dass geht so nicht.. Hilft hier vielleicht den String zeilenweise mit einem BufferedReader einzulesen ?
 
Code:
		String regex = "\\n[ ]*\\n";
				
		System.out.println("\n\n".matches(regex)); //<--true
		System.out.println("\n \n".matches(regex)); //<--true
		
		
		String text ="sdf\n\ndsfsdf\n";
		
		System.out.println(text.replace(regex, "\n")); //<--Nix passiert?

Habs grad mal ausprobiert - irgendwie seltsam...

EDIT:

Code:
		String regex = "\\n[[ ]*\\n]*";
				
		System.out.println("\n\n".matches(regex)); //<--true
		System.out.println("\n \n".matches(regex)); //<--true
		System.out.println("\n \n\n".matches(regex)); //<--true
		
		
		String text ="sdf\n\ndsfsdf\n";
		
		System.out.println(text.replaceAll(regex, "\n")); //<--Klappt


So will's dann doch


EDIT2:

Ich wunder mich nur, das einfache Zeilenumbrüche nicht berücksichtigt werden (*)
 
> Ich wunder mich nur, das einfache Zeilenumbrüche nicht berücksichtigt werden

was soll bei denen denn passieren, wenn du sie durch genau einen anderen Zeilenumbruch ersetzt? 😉


edit:
bei mir müssen die Pattern übrigens
String regex = "\n[ ]*\n";
usw.
lauten
 
Hui, die Experten haben gesprochen 😀 Danke.
Ich glaube Regex werde ich nie richtig begreifen.

Code:
public class RegexTest {

	public static void main (String args []){

		  String regex = "\n[ ]*\n"; 
	            
//	      System.out.println("\n\n".matches(regex)); //<--true
//	      System.out.println("\n \n".matches(regex)); //<--true
//	      System.out.println("\n \n\n".matches(regex)); //<--true
	      
	      
	      String text ="1.Zeile\n\n2.Zeile\n\n\n\n\n3.Zeile\n4.Zeile";
	      System.out.println(text+"\n-----------------");
	      System.out.println(text.replaceAll(regex, "\n")); //<--Klappt
	}
}

Allerdings werden zwischen der 2. und 3. Zeile 2 n's zuviel verschluckt. Ich kapier das nicht ???:L
 
1. die Regex sollte "\\n[[ ]*\\n]*" lauten.
2. die Regex macht aus beliebig vielen Zeilenumbrüchen genau einen
3. die Regex ignoriert Leerzeichen zwischen den Zeilenumbrüchen.


Falls du was anderes haben willst, solltest du das genauer beschreiben.
 
Danke nochmal!
nun kann ichs genau beschreiben. der regex soll aus n zeilenumbrüchen n-1 zeilenumbrüche machen 😉

vielleicht nur ein tip: ist das einfach ? falls ja, ok ich probiere selber darauf zu kommen. nohcmal kurz zu dem "[ ]"
was heißt das genau. Ich kenn das nur so z.B. [^1] ? Habe die Erklärung gerade nirgends finden können.
 
stop ach, was erzähl ich da. Bin aber auch ein Dusel

aus 1 Leerzeile wird keine Leerzeile, aus 3 Leerzeilen werden 2 Leerzeilen, aus 10 Leerzeilen werden 9 Leerzeilen..

so jetzt aba.
 
Versuch das mal. Nicht sonderlich schön, sollte aber funktionieren:

Code:
public String removeEmptyLines(String text)
	{
		char[] array = text.toCharArray();
		
		for(int i = 0; i < array.length; i++)
		{
			if(i >= 2)
			{
				if(array[i-2] == '\n' && array[i-1] == '\n' && array[i] != '\n')
				{
					array[i-1] = (char) -1;
				}
			}
		}
		
		StringBuilder sb = new StringBuilder();
		
		for(char c : array)
		{
			if(c != (char) -1)
			{
				sb.append(c);
			}
		}
		
		return sb.toString();
	}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben