Zeile auf existenz von String prüfen.

Status
Nicht offen für weitere Antworten.

TheJavaKid

Top Contributor
soo ich wieder ne.. :p

wie kann ich am besten (sprich unter so wenig CPU-Belastung wie möglich) die Zeile in einer jtextarea in der sich der caret befindet auf die existenz einer zeichenkette überprüfen

dabei is wichtig dass nur die zeile durchsucht wird in der der caret sitzt

dankee
 

André Uhres

Top Contributor
Schau dir mal dies an:

JTextComponent#getCaretPosition
JTextArea#getLineOfOffset
JTextArea#getLineStartOffset
JTextArea#getLineEndOffset
JTextComponent#getText
String#contains
 

TheJavaKid

Top Contributor
ok ich hab keine ahnung wie ich das mit diesen komischen methoden getLine...Offset() machen soll...

kann mir mal wer helfen
 

André Uhres

Top Contributor
Code:
           lineNumber =  textarea.getLineOfOffset(textarea.getCaretPosition());
            int lineStart = textarea.getLineStartOffset(lineNumber);
            int lineEnd = textarea.getLineEndOffset(lineNumber);
 

byte

Top Contributor
Wenn Du so ne Frage schon nicht im Anfängerforum stellst, müssen diese Antworten auch ausreichend zur Problemlösung sein. :bae:
 

TheJavaKid

Top Contributor
:p

so mein script geht, dankee
Code:
  public boolean containLineString(String text, JTextArea comp) {
    try {
      int line = comp.getLineOfOffset(comp.getCaretPosition());
      int a = comp.getLineStartOffset(line);
      int b = comp.getLineEndOffset(line);
      if(comp.getText().indexOf(text, a) < b && comp.getText().indexOf(text, a)!=-1)
        return true;
      return false;
    } catch( BadLocationException e) { System.err.println("ERROR!!!"); }
    return false;
  }

schau ich etwa aus wie ein anfäger :D

nur machmal is java für nen php-programmierer etwas ... abstrakt ;) generell mein ich
 

miketech

Bekanntes Mitglied
Hi,

Du wolltest doch eine möglichst effiziente Lösung, oder? ;)

Code:
if(comp.getText().indexOf(text, a) < b && comp.getText().indexOf(text, a)!=-1)

Was Du hier schonmal machst ist zweimal die Methode "indexOf" aufzurufen.

Stell Dir einen Text vor, bei dem das gesuchte Wort erst weit hinter der Position "a" vorkommt. Da kann es sein, dass er ganz schön lange sucht. Du willst ja nur den Text in dieser einen Zeile untersuchen.

Schau Dir daher mal die Methode an:

Code:
public String getText(int offs, int len)

Hab das nie probiert, aber laut Doku sollte sie Dir den Text von offs bis offs + len liefern.

Das sollte dann so in der Art bei Dir gehen:

Code:
   String line = comp.getText(a, b-a);
   if (line.indexOf(text) != -1) {
      ...
   }

Dann wird wirklich nur die eine Zeile untersucht.

Gruß

Mike
 
S

SlaterB

Gast
naja, vielleicht ist die Suche sehr viel schneller als einen Teilstring zu bilden?
möchte ich nicht propagieren, aber das Gegenteil würde ich auch nicht sofort behaupten ;)
oder hast du Erfahrungen?

zweimal zu suchen ist in jedem Fall unnötig, das stimmt
 

miketech

Bekanntes Mitglied
Hi,

also Erfahrungen hab ich keine, weil ich Swing nur einmal genutzt habe. Aber ich würde es mal so sehen:

Im Folgenden sei das ursprüngliche Verfahren Nummer (1). Das von mir vorgestellte sei (2).

Man muss eh erstmal zur Position a. Das ist bei beiden Verfahren gleich. Dann müssen beide mindestens bis zu b.

Während er bei (1) nun einen Aufwand von X hat, um bis b nach dem String zu suchen, wird die Variante (2) einen Aufwand Y haben, um bis zu dem Punkt zu wandern. Suche erfolgt keine. Stattdessen wird ein String erzeugt. Daher kann man nicht pauschal Y < X sagen.

Nun muss das Verfahren (2) noch den String suchen. Hat also den Aufwand Y + X.

Das Verfahren (1) sucht nun aber noch weiter mit dem Aufwand Z.

Y + X < X + Z

gilt also, wenn Z größer als Y ist. Und bei einem sehr langen Text kann es schnell vorkommen, dass der Aufwand einen Text sequentiell zu durchsuchen größer ist, als einen String anzulegen.

Hierbei ist mit Aufwand CPU-Aufwand gemeint.

Fazit: (2) lohnt sich, wenn man sich nicht unbedingt weit am Ende des Textes befindet, zumindest bzgl. CPU.

(1) lohnt sich, wenn die Texte kurz sind und man weniger Speicher verbrauchen will.


So und nun kommt noch die VM mit ihren Eigenschaften ins Spiel und würfelt vielleicht wieder alles durcheinander ;) Ich halte meine Variante dennoch für günstiger ;)

Gruß

Mike
 
S

SlaterB

Gast
ist ja allgemein eine interessante Sache,
also noch ein kleiner Test dazu

schon bei 3 Zeilen (160 Zeichen) ist es in diesem Beispiel günstiger,
nur die letzten 60 Zeichen zu durchsuchen als den ganzen String,

mächtig langsam diese indexOf-Suche
bzw. beruhigend, dass die Stringerzeugung nicht allzu lange dauert



Code:
import javax.swing.JTextArea;

public class Test {

	public static void main(String[] args) throws Exception {
		JTextArea comp = new JTextArea();

		for (int i = 0; i < 3; i++) {
			comp.append(
				"dfhsödhdls sjkhh3498z d98cx9x8cvcz v98xc7  98cxv98x\n");
		}
		comp.append("KKKdsfsd\n");

		String line = comp.getText();
		int a = line.length() - 60;
		int b = line.length() - 2;
		System.out.println("Start: " + line.length());
		long time = System.currentTimeMillis();
		for (int i = 0; i < 800000; i++) {
		//	line = comp.getText(a, b - a);
			if (line.indexOf("KKK") != -1) {
			}
		}

		System.out.println("Time: " + (System.currentTimeMillis() - time));

	}

	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Warnung in package Zeile Allgemeine Java-Themen 2
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
C Speicherung fon Zeile und Spalte Allgemeine Java-Themen 2
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
M Startdatei konnte nicht geparst werden. Fehler in Zeile 0 Allgemeine Java-Themen 5
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
S String aus Datei-Zeile auslesen Allgemeine Java-Themen 6
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
H RandomAccessFile - Zeile finden Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
G Zeile einfügen in TreeTable Allgemeine Java-Themen 2
M .txt Datei öffnen und jede Zeile mit festem String verketten Allgemeine Java-Themen 5
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
B Logs - txt-Datei neue Zeile anfuegen, neue Datei erstellen Allgemeine Java-Themen 6
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
P Neue Zeile Plattformunabhängig Allgemeine Java-Themen 3
I Zeile überprüfen Allgemeine Java-Themen 12
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
Saxony Letzte Zeile eines Streames mit auslesen Allgemeine Java-Themen 4
H Notepad - Mitgabeparameter um in eine Zeile zu springen Allgemeine Java-Themen 15
M Funktion liest nach Textaus aus der vorigen Zeile Allgemeine Java-Themen 2
R Einzelne Zeile manipulieren Allgemeine Java-Themen 4
M Datei und Zeile im Code Allgemeine Java-Themen 2
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W gezielt eine Zeile einlesen? Allgemeine Java-Themen 6
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8
G String in String-Array umwandeln in einer Zeile? Allgemeine Java-Themen 2
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
S Ziffern auf Existenz überprüfen Allgemeine Java-Themen 13
N Variablen und ihre existenz Allgemeine Java-Themen 10
C EML Email Text in String wandeln Allgemeine Java-Themen 9
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18
AmsananKING String Iteration Allgemeine Java-Themen 5
S Shuffle String aus if-clause Allgemeine Java-Themen 11
Besset Variablen Ist String = "" + int inordnung? Allgemeine Java-Themen 6
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
SaftigMelo Bug Fixen von String-spliten Allgemeine Java-Themen 8
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
YohnsonM String - Aufteilung und Nutzung einzelner Chars Allgemeine Java-Themen 7
S String umbenennen: wie? Allgemeine Java-Themen 4
x46 String Format Fehler Allgemeine Java-Themen 2
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
L String zu repräsentativen Wert Allgemeine Java-Themen 0
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
L regex ganzer string? Allgemeine Java-Themen 2
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
N String Array Eingabe Allgemeine Java-Themen 6
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
R char aus String entfernen Allgemeine Java-Themen 10
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben