# String abschneiden nach x Zeichen



## yidaki (24. November 2004)

Hi,

die Überschrift hört sich relativ einfach an, ist aber ein bissle schwerer. Ich generiere im moment aus einem jtable eine html.seite. nun kann es vorkommen, dass z. B. Pfade in der Jtable drine stehen und diese von mir aus 60 zeichen lang sind. Da die Tabelle letzten endes zum ausdrucken gedacht ist würde ich gerne nach ca. 30 zeichen den string in dieser zeile unterbrechen und direkt danach unten anfürgen. bestenfalls nach bestimmten zeichen suchen, die zum umbruch geeignet sind z. B. ". || , || / \ || // || ". Würd mich über Vorschläge und Lösunghilfen freuen..


greets


----------



## Snape (24. November 2004)

Hi,
also zum Zerlegen von Strings bis zu einem bestimmten Zeichen gibt es ja den StringTokenizer. Und für einen Teilstring von Index 1 bis Index 2 benutzt man myString.substring(index1, index2)


----------



## yidaki (24. November 2004)

danke, scheint mir die erste gute antwort im internet.... ich bin eigentlich auch schon gerade dabei es mit dem tokenizer zu probieren, wenn geklappt hat schick ich den code 

;-)

thx

hab in der api noch das hier gefunden

String[] result = "this is a test".split("\\s");


----------



## Thomas Darimont (24. November 2004)

Hallo!

Versuchs mal damit:

```
package de.tutorials;

public class StringCutter {

	public static void main(String[] args) {
		String longStr = "T:\\ASWProject\\ide\\jakarta-struts-1.2.4\\src\\jakarta-struts-1.2.4-src\\legacy\\api-1.1\\org\\apache\\struts\\actions\\class-use";
		System.out.println(cutString2(longStr));
	}

	private static String cutString2(String longStr) {
		final char PREFERED_CUT_POINT = '\\';
		final int MAX_LINE_SIZE = 30;
		StringBuffer buffer = new StringBuffer(longStr);
		int len = buffer.length();
		int lastNewLine = 0;
		String s = null;

		for (int i = 0, j = 0; i < len; i++) {
			if (i - lastNewLine < MAX_LINE_SIZE) {
				s = buffer.substring(lastNewLine, i);
				continue;
			}

			char c = 0;

			int posBackward = 0, posForward = 0;

			for (int k = i; k > 1; k--) {
				if (buffer.charAt(k) == PREFERED_CUT_POINT
						&& buffer.charAt(k - 1) != '\n') {
					posBackward = k;
					break;
				}
			}

			int deltaBackward = Math.abs(i - posBackward);

			for (int k = i; k < len - 1; k++) {
				if (buffer.charAt(k) == PREFERED_CUT_POINT
						&& buffer.charAt(k - 1) != '\n') {
					posForward = k;
					break;
				}
			}

			int deltaForward = Math.abs(i - posForward);

			if (i + deltaForward - lastNewLine < MAX_LINE_SIZE) {
				buffer.replace(posForward + 1, posForward + 1, "\n");
				lastNewLine = posForward;
			} else if (i - deltaBackward - lastNewLine < MAX_LINE_SIZE) {
				buffer.replace(posBackward + 1, posBackward + 1, "\n");
				lastNewLine = posBackward;
			} else {
				int pos = buffer.indexOf(String.valueOf(PREFERED_CUT_POINT),
						lastNewLine + 1);
				buffer.replace(pos + 1, pos + 1, "\n");
				lastNewLine = pos;
			}
		}
		return buffer.toString();
	}
}
```

Ausgabe:


> T:\ASWProject\ide\
> 
> jakarta-struts-1.2.4\src\
> 
> ...



Gruß Tom


----------



## yidaki (25. November 2004)

merci, das kann ich denke ich auf jeden fall gebrauchen. die anwednung sieht zwar etwas anders aus und muß weiter ausgebaut werden, aber das führt denke ich in die richtige richtung 

thx


----------



## yidaki (25. November 2004)

so siehts jetzt aus... danke nochmal an thomas ;-)...




```
/*
 * Created on Nov 25, 2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package einarbeitung;

/**
 * @author kik
 * 
 * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
 */
public class StringShradder {
	static StringBuffer buff = new StringBuffer();
	static char[] CUT_POINTS = {'.', '/', '\\', ',', '-', '>', '<'};
	static int MA_SIZE = 30;
	static int TEMP_MARK = 0;
	static String WBR = "<wbr>";
	public static void main(String args[]) {

		buff.append("<HTML>\n");
		buff.append("<HEAD>\n");
		buff.append("<BODY>\n");
		buff.append("BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB \n");
		buff.append("BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB \n");
		buff.append("BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB \n");
		buff.append("BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB \n");
		buff.append("BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB BLA BAL BAL BAL BALB BLA BALB ALB \n");

		String shredd3 = "1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567890 flexfinance.loanSystem.loan.create.content.basicData";

 	  shreddString(shredd3);
		System.out.println(buff);
	}

	private static void shreddString(String longString) {
		String[] result = longString.split(" ");
		for (int i = 0; i < result.length; i++) {
			if (result[i].length() < MA_SIZE) {
				buff.append(result[i]).append(" ");
			} else if (result[i].length() >= MA_SIZE) {
				for (int f = 0; f < result[i].length(); f++) {
					if (identifier(result[i].charAt(f))) {
						buff.append(WBR);
					}
					buff.append(result[i].charAt(f));
				}
			}
		}
	}
	private static boolean identifier(char testung) {
		for (int x = 0; x < CUT_POINTS.length; x++) {
			if (testung == CUT_POINTS[x]) {
				return true;
			}
		}
		return false;
	}
}
```

gruß aus trier


----------

