Im eingelesenen Text nach einem Wort suchen

Status
Nicht offen für weitere Antworten.
B

benimoe

Gast
Hallo!

Ich bin noch Anfänger und suche mich im Internet schon halbtot nach der Beantwortung einer Frage.

Ich habe mit einem Java-Programm einen Quelltext einer HomePage importiert. Wenn ich System.print.... sage schreibt er mir den Quelltext auch komplett in der Konsole hin. Aber es geht mir eigentlich darum nach etwas bestimmtem im Quelltext zu suchen und diesem gefundenen Wort oder zahl eine Variable zuzuweisen.
z.b.
(dies ist nur ein ausschnitt aus dem quelltext der hp)
Code:
<td class="hl">KGV</td><td>17,52</td><td>15,72</td><td>13,67</td></tr><tr>

es geht mir darum das er das Wort KGV sucht, dem quelltext entsprechend 9 zeilen nach rechts verschoben die zahl 17,52 erfasst, und einer variablen zugeordnet wird z.b. kgv1

ich hab wirklich nicht allzu viel erfahrung auf dem gebiet und ich würde mich freuen, wenn mir jemand vielleicht ne beispielprogrammierung aufschreiben könnte.

wäre echt hilfreich

cu
benimoe
 

Wildcard

Top Contributor
Gibt da mehrere Möglichkeiten.
-Mit String#indexOf kannst du nach Zeichenketten suchen
-Mit RegEx kannst du mit regulären Ausdrücken suchen
-Wenn es sich um xHTML handelt erhälst du die besten Ergebnisse mit einem XML Parser (zB JDom)
 
G

Guest

Gast
danke ersma für die hilfe.

nur sagen mir diese dinge nix, ich hab mal im internet gestöbert und hab das gefunden

Code:
String kgv; (n paar zeilen später) =>  if(kgv.indexOf("KGV") >= 0)
        {
            System.out.println("ich hab das kgv"+kgv);
            
         }

Nur Leider könnte ich damit nur das kgv ausschreiben, aber es geht darum den wert kurz hinter KGV einer variablen zuzuweisen. ich glaub mein inf.prof. meinte da irgendwas von pos+9 (da die gesuchte zahl um neun zeichen nach rechts verschoben auftaucht) und dann der zahl 17,52 eine variable zuweisen.

wie gesagt ne beispielprogrammierung wäre echt hilfreich,

bin im 1.sem
 

The_S

Top Contributor
Naja, mit indexOf holste dir die Position, und mit substring kannste dann deinen String an einer bestimmten Stelle aufteilen bzw. einfach einen kleineren daraus bauen.
 
G

Gast

Gast
kannste dat vielleicht anhand eines beispiels veranschaulichen??
 
G

Guest

Gast
ich hab dat mit indexOf mal anders versucht, aber er gibt immer die fehlermeldung raus dass er die variable t nicht finden kann :


Code:
String t = br.readLine(); 
      while (t != null) { 
      //x1 System.out.println(t); 
        t = br.readLine(); 


String str =t;
int index = str.indexOf( "KGV" ); 
//x2 System.out.println(index);
obwohl ich die variable t schon in der console ausgegeben hab. es ist der string für den kompletten quelltext, der logischweise dursucht werden soll.

bei x1 klappt die ausgabe, aber nicht bei x2
 
G

Guest

Gast
Anonymous hat gesagt.:
ich hab dat mit indexOf mal anders versucht, aber er gibt immer die fehlermeldung raus dass er die variable t nicht finden kann :


Code:
String t = br.readLine(); 
      while (t != null) { 
      //x1 System.out.println(t); 
        t = br.readLine(); 


String str =t;
int index = str.indexOf( "KGV" ); 
//x2 System.out.println(index);
obwohl ich die variable t schon in der console ausgegeben hab. es ist der string für den kompletten quelltext, der logischweise dursucht werden soll.

bei x1 klappt die ausgabe, aber nicht bei x2, wenn ich z.b. anstatt String str = t ; String str= "Dat is wat zu suchen nach KGV ist."; ersetze klappts wiederum
 
G

Guest

Gast
Unbenannt.JPG


warum funzt et net??

p.s. klickt auf eigenschaften von dem bild und fügt die link adresse in den browser ein dann klappt die bildausgabe,

aber dat programm, hmm

help wäre cool

og hab gerade gesehen dat da "12" anstatt "KGV" steht. wenn da"KGV" steht, isset aber derselbe fall und die fehlermeldung
 
S

SlaterB

Gast
die while-Schleife läuft solange bis t null ist,
dann weist du str t zu,
dann greifst du auf str zu, was ja null ist,
das gibt natürlich eine NullPointerException,

-> was ist dein Problem? ;)
 
G

Gast

Gast
ok ich hab folgendes probiert:

die zeile :"String str=t;" gelöscht so dass es keine umdeklarierung gibt. klappt net immer noch nullpointer

ich bin zu blöd dafür könnt ihr mir nicht n beispiel aufschreiben, damits mir klar wird??

plz!! beispiele sind echt viel besser
 
M

MrChance

Gast
So geht es, aber ich glaub mit org.apache.regexp geht es viel bequemer:

Code:
		String s = "<td class=\"hl\">KGV</td><td>17,52</td><td>15,72</td><td>13,67</td></tr><tr>";
		Pattern p = Pattern.compile("KGV.*?<td>[0-9]+,[0-9]+</td>");
		
		for (Matcher m = Pattern.compile("KGV.*?<td>[0-9]+,[0-9]+</td>").matcher(s); m.find(); ) {
			s = s.substring(m.start(), m.end());

			System.out.println("Gefunden: " + s);
			Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(s);
			
			if (n.find()) {
				double d = Double.parseDouble( s.substring(n.start(), n.end()).replace(',', '.')  );
				System.out.println("Wert= " +d);
			}
		}
 
S

SlaterB

Gast
Gast hat gesagt.:
ich bin zu blöd dafür könnt ihr mir nicht n beispiel aufschreiben, damits mir klar wird??

plz!! beispiele sind echt viel besser

so gehts auch

String str ="KGV";
int index = str.indexOf( "KGV" );

für alles andere musst du genauere Beschreibungen liefern,
wenn ein Objekt null ist, dann hilft es fr den Zugriff nicht, das Objekt komplett auszuradieren ;)
sondern dann muss das Objekt irgendeinen Inhalt bekommen
 
G

Gast

Gast
ich hab das beispiel von mrchance mal aufgegriffen und es versucht ein bisschen daraufhin umzumodeln, das er auch die zahlen 15,72 und 13,67 einer variablen zuweist. aber es funzt natürlich net und wenn ich anstatt dem ausgeschnittenen quelltext aus zeile 2(mrchance beitrag) den ganzen, also t nehme kennt er t natürlich nicht oder t hat keinen wer oder so.

aber mit ausgeschnittenem quelltext klappt das beispiel von mrchance, meine erweiterung des beispiels nicht,
aber seht selbst
Code:
String t = br.readLine(); 
      while (t != null) { 
       //System.out.println(t); 
      t = br.readLine();}
		
}catch (MalformedURLException mue) { 
      System.out.println(mue.getMessage()); 
    							   } 
    catch (IOException ioe) { 
      System.out.print("Allgemeine IO-Ausnahme mit "); 
      System.out.println(ioe.getMessage()); 
    						}   								 
									
unter1();
unter2();
unter3();
/*System.out.println(kgv27);*/  
}


static void unter1()
{
 	
	String s ="</tr><tr class=hr><td class=hl>KGV</td><td>11,38</td><td>10,07</td><td>9,92</td></tr><tr class=hgrau2 hr>";
      Pattern kgv1 = Pattern.compile("KGV</td><td>[0-9]+,[0-9]+</td>");
      
      
     for (Matcher m = Pattern.compile("KGV</td><td>[0-9]+,[0-9]+</td>").matcher(s); m.find(); )
         {s = s.substring(m.start(), m.end());
         System.out.println("Gefunden: " + s);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(s);
         if (n.find()) {
         double kgv25 = Double.parseDouble( s.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv25);}}}
	 

static void unter2()
{


		String s2 ="</tr><tr class=hr><td class=hl>KGV</td><td>11,38</td><td>10,07</td><td>9,92</td></tr><tr class=hgrau2 hr>";
		Pattern kgv2 = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>");

	 for (Matcher m = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>").matcher(s2); m.find(); )
         {s2 = s2.substring(m.start(), m.end());
         System.out.println("Gefunden: " + s2);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(s2);
         if (n.find()) {
         double kgv26 = Double.parseDouble( s2.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv26);}}}
         
         
         
static void unter3()         
{

         
         String s3 ="</tr><tr class=hr><td class=hl>KGV</td><td>11,38</td><td>10,07</td><td>9,92</td></tr><tr class=hgrau2 hr>";
         Pattern kgv3 = Pattern.compile("KGV</td><td>11,38</td><td>10,07</td><td>[0-9]+,[0-9]+</td>");
         
     for (Matcher m = Pattern.compile("KGV</td><td>11,38</td><td>10,07</td><td>[0-9]+,[0-9]+</td>").matcher(s3); m.find(); )
         {s3 = s3.substring(m.start(), m.end());
         System.out.println("Gefunden: " + s3);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(s3);
         if (n.find()) {
         double kgv27 = Double.parseDouble( s3.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv27);}}}       
}

als ergebnis steht da noch :

Gefunden: KGV11,38
Wert= 11.38
Gefunden: KGV11,3810,07<
Wert= 11.38
Gefunden: KGV11,3810,079,92
Wert= 11.38
 
S

SlaterB

Gast
dein Posting ist schön lang, enthält aber keine sinnvolle Frage oder Problembeschreibung

du hast garantiert irgendeinen total simplen Fehler,
aber immer noch nicht verraten worum es überhaupt geht,

hat der Code
Code:
String t = br.readLine();
while (t != null) {
       //System.out.println(t);
     t = br.readLine();
}

immer noch etwas mit der Aufgabe zu tun?
ich kann zum dritten mal sagen: so wieder der da steht macht er keinen Sinn,
da werden Zeilen eingelesen aber nicht gespeichert,
am Ende ist t null,
ganz einfach,

bevor du also in irgendeiner Form an indexOf() oder Pattern oder sonst was denkst solltest du erstmal diesen Code-Teil reparieren,

---------

was soll in t rein?
das ist eine entscheidene Frage hier

wozu machst du eine Schleife mit br.readLine()?
das ist eine entscheidene Frage hier

kümmere dich darum, sorge dafür dass das funktioniert und du am Ende z.B. mit

String dasErreichte = ..;
System.out.println("das erreichte ist: "+dasErreichte);

etwas funktionierendes vorzuweisen hast,
DANACH denke vielleicht an neue Aufgaben.....
 
G

Guest

Gast
danke erstmal für die hilfe
ich weiss, ich hätte vielleicht den groben zusammenhang erläutern sollen deshalb zeige ich euch am besten den ganzen quelltext:

Code:
import java.io.*; 
import java.net.*; 
import java.util.regex.*;

public class Analyse { 

	
	static String t,kgv25,kgv26,kgv27;
	
  public static void main(String args[]) { 

	  haupt();
	  unter1();
	  unter2();
	  unter3();
  }

  
  static void haupt()
  {	  
	  
	  

		  
		  try { 
     URL url=new URL("http://www.....zu analysierende website");
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
			conn.setRequestProperty("Referer", "http://www....zu analysierende Website");
			conn.connect();
			BufferedReader br =new BufferedReader(new InputStreamReader(conn.getInputStream()));	
     
     
     
      t = br.readLine(); 
      while (t != null) { 
     //  System.out.println(t);  x1
      t =br.readLine();
      
      }}
		

      catch (MalformedURLException mue) { 
      System.out.println(mue.getMessage()); 
    							   } 
    catch (IOException ioe) { 
      System.out.print("Allgemeine IO-Ausnahme mit "); 
      System.out.println(ioe.getMessage()); 
    						}   								 }
									



static void unter1()
{	
	System.out.println(t);
	
      Pattern kgv1 = Pattern.compile("KGV</td><td>[0-9]+,[0-9]+</td>");
      
      
     for (Matcher m = Pattern.compile("KGV</td><td>[0-9]+,[0-9]+</td>").matcher(t); m.find(); )
         {t = t.substring(m.start(), m.end());
         System.out.println("Gefunden: " + t);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
         if (n.find()) {
         double kgv25 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv25);}}}
	 

static void unter2()
{

	
		
		Pattern kgv2 = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>");

	 for (Matcher m = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>").matcher(t); m.find(); )
         {t = t.substring(m.start(), m.end());
         System.out.println("Gefunden: " + t);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
         if (n.find()) {
         double kgv26 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv26);}}}
         
         
         
static void unter3()         
{

         
         
         Pattern kgv3 = Pattern.compile("KGV</td><td>11,38</td><td>10,07</td><td>[0-9]+,[0-9]+</td>");
         
     for (Matcher m = Pattern.compile("KGV</td><td>11,38</td><td>10,07</td><td>[0-9]+,[0-9]+</td>").matcher(t); m.find(); )
         {t = t.substring(m.start(), m.end());
         System.out.println("Gefunden: " + t);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
         if (n.find()) {
         double kgv27 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv27);}}}       
}

Es geht darum den quelltext zu speichern um damit zu arbeiten, d.h. informationen aus der seite ziehen. um mir das ewige im browser anwählen zu sparen.

um bestimmte daten auf den seiten zu speichern muss ich ja zunächst die website in java aufrufen , dann den quelltext einer variablen zuweisen (hier t) , und dann im quelltext nach bestimmten wörtern zu suchen (hier kgv), ein weiteres problem ist, das die wichtigen information kurz hinter dem wort kgv stehen (hier 11,38 und 10,07 und 9,92), deswegen die 3 untermethoden ( unter1() + unter2() + unter3() )

aber es klappt nicht, es beginnt schon bei dem fehler, das ich nicht weiss wie man die variable t speichert. wenn ich System.out.println(t) in unter1() einsortier kann er nicht lesen und gibt 0 raus. es klappt nur in der while-schleife. aber wenn ich unter1() in die while-schleife packe klappts auch net.

noch dazu klappen die pattern und match-dinger auch nicht.

ich brauch das programm für die schule und hab eigentlich nicht soviel plan von java.
ich finde es aber gut das es hier ein forum gibt das einem recht schnell hilft und konstruktive kritik äußert. das erhöht den lerneffekt. ich weiss ich hab mich vorher unpräzise ausgedrückt, aber ich hoffe diesmal gehts besser.

cu
 
S

SlaterB

Gast
warum postest du jetzt nochmal diese riesigen Operationen unter1-3?
dein Text läßt ja vermuten, dass es langsam zu dir durchgedrungen ist,
dass es im Moment nur um die 4 Zeilen mit der t-while-Schleife geht ;)

-----------

> um bestimmte daten auf den seiten zu speichern muss ich ja zunächst die website in java aufrufen ,
> dann den quelltext einer variablen zuweisen (hier t) ,
> und dann im quelltext nach bestimmten wörtern zu suchen

schau mal an, in 3 simplen Zeilen das Problem komplett beschrieben,
was bisher in zig Posts, Tagen und Wochen nicht zu Tage geführt wurde

das ist die deutsche Spache, viel besser als Java..

---------

also wie macht man das?
ich verkneife mir dann diesmal, auf Tutorials/ Lehrbücher zu verweisen:

Code:
StringBuffer allText = new StringBuffer();
t = br.readLine();
while (t != null) {
    allText.append(t);
    allText.append("\n"); // Zeilenumbruch falls benötigt
    t =br.readLine();
}

t = allText.toString()
 
System.out.println("-----------------------------");
System.out.println("Die Webseite ist:");
System.out.println(t);

so, funktioniert das soweit oder nicht?
 
G

Guest

Gast
super
jetzt hats geklappt, sach mal woher weisst du das alles?

muss man ja schon jahre damit zu tun haben schätze ich, jedenfalls danke,

nun sind nur noch 2 weitere Probleme:

1.Problem:

quellcode t wird jetzt ausgegeben und in dem match und pattern dingen akzeptiert.
nur aber halt für eine untermethode, die anderen beiden werden am ende nicht ausgegeben, d.h. es stehen am ende immer nur 2 zeilen als ergebnis, (1 zeile für kgv gefunden und 2. der entsprechende wert), es müssten aber sechs sein (3 untermethoden x 2 zeilen)


2. Problem :

wie ich im vorigen post bereits erwähnte gehts ja um die zahlenwerte die hinter dem kgv stehen. der erste zahlenwert ist 3-4 zeichen weiter der 2. wert 8-9 oder so usw. ich hab das mit den match pattern-dingen versucht logisch zu ergründen und für die anderen beiden zahlenwerte, die halt n paar zeichen weiter im quellcode stehen, angepasst.
aber nun ja wie immer halt funzts nich.
 
S

SlaterB

Gast
1. Problem:
in den unter-Operation machst du t kaputt (weist du t einen neuen Wert zu)
tue das nicht ;)

2. Problem:

ist mir wieder bisschen zu umständlich, das irgendwo zusammenzusuchen,

poste mal EINE der unter-Dinger die nicht geht,
und zwar komplett mit Beispiel-String

t = ... // nicht einlesen aus URL sondern als Beispiel eine Zeile oder so komplett hinschreiben
Pattern
usw.

was kommt raus wenn überhaupt,
was soll stattdessen rauskommen?
 
G

Guest

Gast
Code:
                      String t="<tr class="hr"><td class="hl">KGV</td><td>11,38</td><td>10,07</td><td>9,92</td></tr>"
                             
 /*Auszug ausm Quellcode er(also er soll das wort kgv suchen, dort ansetzen und n paar zeilen nach rechts verschoben 10,07 einer variablen zuweisen nämlich kgv26*/

Pattern kgv2 = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>");

	 for (Matcher m = Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>").matcher(t); m.find(); )
         {t = t.substring(m.start(), m.end());
         System.out.println("Gefunden: " + t);
         Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
         if (n.find()) {
         double kgv26 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
         System.out.println("Wert= " +kgv26);}}
 
S

SlaterB

Gast
dann hilft dir vielleicht folgendes weiter

Code:
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) throws Exception {
		String t =
			"<tr class=\"hr\"><td class=\"hl\">KGV</td><td>11,38</td><td>10,07</td><td>9,92</td></tr>";

		Pattern kgv2 =
			Pattern.compile("KGV</td><td>11,38</td><td>[0-9]+,[0-9]+</td>");
		Pattern zahl = Pattern.compile("[0-9]+,[0-9]+");
		Matcher m = kgv2.matcher(t);
		DecimalFormat nf = new DecimalFormat();
		nf.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.GERMAN));
		String part;
		while (m.find()) {
			part = m.group();
			System.out.println("Gefunden: " + part);
			Matcher n = zahl.matcher(part);
			while (n.find()) {
				String kgv26 = n.group();
				System.out.println("Wert= " + kgv26+ " - "+nf.parse(kgv26));
				
			}
		}

	}

}

aber ich hoffe du beschäftigst dich bald wieder mit Dingen auf realistischen Wissensniveau..
 
G

Guest

Gast
hallo!

gibt es eine möglichkeit double zahlen zu speichern und die dann in eine andere methode wieder aufrufen zu können

Code:
static void unter1() throws ParseException 
{
// System.out.println("-----------------------------");
//System.out.println("Die Webseite ist:");
//System.out.println(t);


Pattern kgv1 = Pattern.compile("EUR</td><td>216,99&nbsp");


for (Matcher m = Pattern.compile("EUR</td><td>216,99&nbsp").matcher(t); m.find(); )
    {t = t.substring(m.start(), m.end());
   // System.out.println("Gefunden: " + t);
    Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
    if (n.find()) {
    double kgv25 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
    System.out.println("Wert= " +kgv25);
    
}}
}

static void berechnung()
{
	
	
	pictet=188.79-kgv25;
	



}
immer wenn ich das versuche erkennt er kgv25 nicht??

ich hab schon bei "java ist auch eine insel gesucht"aber ich weiss nicht unter welchem stichwort ich suchen soll?
kennt jemand im i-net n leichtes tutorial für java mit beispieln für leute die bisher mit programmiersprachen noch nix am hut hatten?

mfg
naja gast *g*
 
S

SlaterB

Gast
was besseres als die Insel gibt es nicht ;),
muss man mnatürlich eine Woche lang lesen

und für solche logischen Fragen hilft eh kein Tutorial der Welt,
also es steht da (überall) schon sehr gut erklärt, aber man kann nicht danach suchen,

und wenn man es nach dem ersten Lesen noch nicht verstanden hat (eines der zentralen Themen überhaupt)
dann hat man eh beim ersten Lesen was falsch gemacht

--------

also:
damit die Daten längere Zeit da sind, musst du sie längerfristig speichern,
entweder als Exemplarvariable in einem Objekt oder in einer statischen Variable,

oder halt die ganze Zeil jonglieren
(als Rückgabeparameter zurückliefern und der neuen Operation wieder als Parameter mitgeben)
 
G

Gast

Gast
ich hab kgv25 als statisch double variable deklariert

und zwar unter public class:

mit static double kgv25,...(noch n paar andere)..;

aber det hilft nicht.
 
G

Gast

Gast
das problem ist ja das kgv25 nur in der for bzw. if-schleife gültig ist.
gibts dafür n befehl, das ich die in jeder x-beliebigen methode aufrufen kann, z.b. return oder n neue class-datei öffnen wo die variable gespeichert wird und dann in einer anderen methode wieder auf die class-datei zugreifen.

ich weiss die syntax dafür aber nicht

unter dem kap. 2.4. schleifen "java insel" steht was von return und schleifen aber dort wird meine frage nicht beantwortet.

plz help
 
S

SlaterB

Gast
ja, in der Schleife wird kgv ständig was neues zugewiesen,
wenn du mit allen Zwischenwerten arbeiten willst,
musst du entweder alle speichern (z.B. in einem Array)
oder noch in der Schleife die weiteren Operationen aufrufen,

übrigens schreibst du in der Schleife
double kgv25 = Double.parseDouble..

damit legst du eine neue lokale Variable kgv25 an,
um die statische Variable zu benutzen schreibe
kgv25 = Double.parseDouble..

oder deutlicher
Klassenname.kgv25 = Double.parseDouble..
 
G

Gast

Gast
gibts keinen befehl, den ich in der schleife aufrufen kann, der dafür sorgt das ich ausserhalb der schleife auf kgv25 zugreifen kann?
z.b. save "kgv25" oder irgendwat. dat mit den arrays versteh ich nich, ich dacht die sind dafür da bel. viele werte zwischenzuspeichern, inwiefern hilft mir dat.

und falls, du mir helfen möchtest, am besten mitm beispiel, bitte nicht falsche verstehen, isch schätze deine hilfe, aber ich weiss zwar so ungefähr was mit den stichworten gemeint ist, aber ich hab zu wenig erfahrung sie tatsächlich zu nutzen,

wie gesagt, studier inf. im 1. semester und hab bisher noch nie mitner prog-sprache gearbeitet.
 
S

SlaterB

Gast
ich hab nur einen Tipp: lerne Java,
wenn das mit einem Buch nicht klappt werde ich mir nicht die Mühe machen,
dir soetwas komplexes beizubringen ;), das dauert Monate/ Jahre,

in einer Schleife kannst du wie überall ALLES machen, auch den Wert irgendwo anders speichern,
sei es in einer statischen Variable oder in einer DB,
du kannst sogar eine Operation aufrufen, die diesen Wert per Internet hier ins Forum reinschreibt,
ALLES geht,

eine statische Variable deklariert man mit
static double kgv25;

speichern dann mit
kgv25 = 2;

was soll man dazu noch mehr sagen?
 
G

Gast

Gast
dat funktioniert nicht, du meinst also:
Code:
static void unter1() 
{
// System.out.println("-----------------------------");
//System.out.println("Die Webseite ist:");
//System.out.println(t);





for (Matcher m = Pattern.compile("EUR</td><td>[0-9]+,[0-9]+&nbsp").matcher(t); m.find(); )
    {t = t.substring(m.start(), m.end());
   // System.out.println("Gefunden: " + t);
    Matcher n = Pattern.compile("[0-9]+,[0-9]+").matcher(t);
   if (n.find()) {
    Analyse.kgv25 = Double.parseDouble( t.substring(n.start(), n.end()).replace(',', '.')  );
    System.out.println("Wert= " +kgv25); 
    
    u =kgv25 ; 
}}}



static void berechnung()
{

	System.out.println("Wert= " +u);


}
erscheint mir zudem n bisken unlogisch in der if-schleife kgv25 einfach 2 zuzuweisen. bei jedem neuen if-schleifendurchgang ist 2 doch dann genauso wieder wat anderet(hab 2 jetzt mit u ersetzt). kann sein das du was anderes meinst, ich hab mir dat so vorgestellt, das ich(im zuge der objektorientierung java´s) eine neue datei "gründe", die alle variablen speichert, die ich für zukünftige berechnungen brauche.
unser teacher meinte irgendwat mit new "dateiname.java"=... irgendsowat, womit ich kgv25 für zukünftige berechnungen extern festhalten kann.
 
G

Gast

Gast
ach ja "static double kgv25;" war von vornerrein im programm von mir notiert worden, hatte keine auswirkungen
 
S

SlaterB

Gast
es gibt Herr Gott-nochmal keine if-Schleife ;)

> hatte keine auswirkungen
blah blah,
son Quatsch, alles hat Auswirkungen, der Compiler ignoriert deinen Code nicht,
natürlich kann man alles richtig und falsch/ unbenutzt einsetzen

------
'2 zuzuweisen' hatte natürlich nichts mit deinem Problem zu tun, sondern war ein Beispiel,
wie man einer statischen Variable etwas zuweist,

alternative Beispiele:
kgv25 = 3;
kgv25 = 4;
kgv25 = 5;
kgv25 = 5666;
kgv25 = 46636336;

kannst ja jetzt für jede Zahl schauen ob sie dein Programm löst...

sorry, aber wenn du so sprichst, dann provozierst du solche Scherze ;)

-------

eine double-Variable objektorientiert durch etwas anderes zu ersetzen ist ein schlaues Vorgehen,
aber 'gründe' ist da ein schlechter Name,

(nebenbei: objektorientiert spricht man von einem Objekt oder einer Klasse,
'Datei' oder '.java' erwähnt man praktisch nie)

-----------

wie immer:
was dein Problem ist weiß niemand außer dir,
es ist nur allgemein was von kgv25 und einer for-Schleife bekannt,

allgemein kann man sagen:
einen einzelnen Wert kann man in einer einzelnen Variablen speichern,
für viele Werte (z.B. einen pro Schleifendurchlauf) brauchts ein Array oder eine Liste,

ob direkt als statische Variable, oder in einem Objekt enthalten
(und dieses Objekt statisch gespeichert), macht konzeptionell keinen Unterschied
 
G

Gast

Gast
ich hab dat problem lösen können.

mit einem break; nach dem if und der for-schleife hats geklappt.

nur jetzt hab ich n anderet problem.

ich versuchs mal so konkret wie möglich auszudrücken:

das ergebniss das, dass programm am ende produziert, lässt sich nich auf ein anderes objekt( objekt ist doch eine andere java datei oder?) übertragen.
mal angenommen kgv25 besitzt am ende des programms (also z.b. wenn ich das ergeniss mit system.out ausgeben will den wert 5). dann will ich das er in einem anderen programm, z.b. ein applet-ausführungs-programm den wert 5 ausgibt.(ich wollt das ins i-net stellen) nur wenn ich die variable kgv25 aufrufe mit:

Analyse.kgv25;

kommt nur null raus.

ich glaub die schwierigkeit besteht darin, das er das programm erst ausführen muss damit da 5 rauskommt, aber das applet-programm macht das mit dem Analyse-programm nicht und so kommt immer null raus.

gibts n befehl oder ne problemlösung dafür??
wie immer am besten beispiele

plz help
 

Murray

Top Contributor
Schnelle Lösung: füge in der Klasse eine ebenfalls statische ZUgriffsmethode ein, die den relevanten Code ausführt und dann den Wert zurückliefert, also in etwa so:

Code:
public static double getKGV25() {

    main( new String[0]);
    return kgv25;
}

Ein Musterbeispiel für sinnvolle Programmstrukturierung wird man so aber nicht bekommen; schöner wäre es, auf statics zu verzichten, die notwendigen Abläufe nicht in der main-Methode zu definieren, Konstanten wie die URL oder die zu untersuchenden Patterns als Parameter zu definieren ...
 
G

Guest

Gast
irgednwie klappt dat nich so wirklich
kommt folgende fehlermeldung: (standpictet ist variable die importiert werden soll aus Analyse.java [Analyse.java ist im selben Ordner] )

Unbenannt.JPG
 
G

Gast

Gast
falls man dat bild nich sieht, einfach sagen "grafik kopieren" und in browser einfügn.

mfg "gast"
 
S

SlaterB

Gast
du definierst eine Operation außerhalb einer Klasse,
das geht nicht...............

------------

Variablen kann man nicht importieren............

jedenfalls nix für Anfänger, habe ich selber in vielen Jahren noch nicht gemacht
 
G

Gast

Gast
kann man nicht irgendwie Analyse,java (das eigentliche Berechnungsprogramm) im hintergrund ausführen lassen oder so?

da ich die ergebnisse von Analyse.java in dem anderen programm applet.java im internet aufrufen möchte.

in der schule haben wir son befehl kennen gelernt wie man eine variable z.b. (s=5 im programm test.java)

in einer anderen datei z.b. test2.java s importieren kann und der wert 5 wird dort korrekt ausgegeben

ich hoffe man kann mir folgen habs schwer mit dem verbalen

mfg
 
S

SlaterB

Gast
natürlich können Objekte und Klassen miteinander agieren,

z.B. kann eine Klasse
public static int WICHTIGE_KONSTANTE = 4;
definieren, und andere Klassen darauf mit

int wieWarDasNoch = KlasseX.WICHTIGE_KONSTANTE;

zugreifen,
das geht allgemein, klar,
hat mit 'Importieren von Variablen', wie ich es bemängelte, nix zu tun,
dafür braucht man nämlich keinen Import
 
G

Gast

Gast
ja ok das wusste ich auch schon nur das problem ist das dass programm Analyse.java erst ausgeführt werden muss,d.h. den wert für WICHTIGE_KONSTANTE erhalte ich erst wenn ich das programm ausführe und wenn eine andere klasse mit Analyse.WICHTIGE_KONSTANTE; darauf zugreifen will kommt nur 0 raus, wahrscheinlich wird dabei das programm nicht erst ausgeführt,
gibtsn befehl dafür wie ich in der klasse applet.java ihm sagen kann "führe programm aus" und hole den wert mit Analyse.WICHITGE_KONSTANTE; rüber??
 
S

SlaterB

Gast
habe ich selber noch nie gemacht, insbesondere wird ein Applet im Browser wohl nicht beliebige Programme starten dürfen,

mach es doch folgendermaßen:
Analys.java-main sieht wie folgt aus:
Code:
public static void main(String[] args) {
   berechneAlles();
}
public static void berechneAlles() {
    ...
}

dann kannst du genausogut vom Applet aus berechneAlles() aufrufen und danach auf die dann gesetzen Variablen zugreifen,
(Konstanten sind es dann ja nicht mehr..)
 
G

Gast

Gast
danke
der befhel hat funktioniert auf der festplatte klappt der zugriff,

aber sobald ich beide dateien ins netz stelle, aufm webspace und das applet mittels browser und eigens gebastelter website versuche das applet zu starten funzt es nicht?

wenn ich von festplatte starten kein prob, als applet im netz geht nix

warum?

plz help
 

anfänger15

Bekanntes Mitglied
denke mal dein applet hat nicht die benötigten rechte da es irgendwie auf die festplatte zugreift(nur ne vermutung hab den post hir nur überflogen)
 
G

Gast

Gast
das kann sein, wie funktioniert das denn mit den rechten, wie krieg ichs hin, dass das applet auf Analyse.java(der datenbezug) zugreifen darf? beide dateien applet und analyse.java liegen aufm webspace
 
N

nuely

Gast
Anonymous hat gesagt.:
das kann sein, wie funktioniert das denn mit den rechten, wie krieg ichs hin, dass das applet auf Analyse.java(der datenbezug) zugreifen darf? beide dateien applet und analyse.java liegen aufm webspace

also ich kenn deine beiden "Dateien" nicht, aber ich hab die Vermutung, dass da was verkehrt läuft. Meiner Meinung nach musst du nur die beiden "Dateien" miteinander verbinden.
Beispiel:

Code:
public class beispiel {

	public static void main(String[] args) {
		int umrechnen=4;
		int umgerechnet;
		umgerechnet=umrechnung(umrechnen);
		//Die Variable umgerechnet bekommt den Wert den die Methode umrechnung zurückgibt, also 2, weil 4/2=2.
	}

	private static int umrechnung(int umzurechnen) {
		int temp;
		temp=umzurechnen/2;
		return temp;
	}
}

Die Methode umrechnung muss dabei natürlich nicht zwingend in der selben "Datei" sein, sondern kann auch in einer anderen liegen.

PS: Warum ich Datei in Anführungszeichen setze?
In Java kennt keiner das Wort Datei. Dort gibt es Objekte, Klassen, Methoden, Variablen, Kostanten usw.
Das was du unter Datei verstehst ist am einfachsten wohl gleichzusetzen mit Klasse.
 
G

Gast

Gast
schaut recht kompliziert aus, bin in java noch nich so der crack

gibt es nicht einen einfachen befehl den ich in der applet-klasse schreiben kann,

so was wie grant_permission : Analyse.java

(auf Analyse.java soll das applet zugreifen, da in dieser klasse die berechnungen durchgeführt werden, die im applet dargestellt werden sollen)

hab von diesem policy-tool gelesen, habs ausprobiert aber ich blick da nich durch

es muss doch irgendeinen simplen befehl geben, damit die klasse applet.java volle zugriffsrechte bekommt, auf andere klassen im webspace

p.s. ( ich hab mitgekriegt das klassen die einzelnen java-dateien sind, und methoden sind einzelnen abschnitte in der mainmethode( also programmabschnitte, die zur strukturierung dienen, oder)
was gibt da sonst noch, was zb. sind dann objekte?

plz help einem armen newbie
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
P Socket Client empfängt nur eigene Text-Eingaben Netzwerkprogrammierung 30
T IceFaces: Tooltip text formatieren Netzwerkprogrammierung 5
V Angezeigten Text einer Website erfragen Netzwerkprogrammierung 4
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
M DatenStrom (text) entschlüsseln. Netzwerkprogrammierung 3
Dann07 Audio streamen bricht immer ab nach kurzer Zeit Netzwerkprogrammierung 6
G seite nach posten eines html-forms laden Netzwerkprogrammierung 0
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
L Verzeichnisse mit Inhalt nach SMB-Share kopieren Netzwerkprogrammierung 16
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
P Datenpakete nach Australien Netzwerkprogrammierung 7
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
J Nach Dateiversand werden keine Nachrichten mehr übertragen Netzwerkprogrammierung 11
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
D Socket Automatischer Reconnect nach einem Disconnect. Netzwerkprogrammierung 4
S Socket nach anderen clients im netzwerk suchen Netzwerkprogrammierung 3
B IP nach gewissen Kriterien überprüfen Netzwerkprogrammierung 5
V JNLP startet nicht !!?!! (je nach PC) Netzwerkprogrammierung 1
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
T Zugriffsverweigerung nach Dateitransfer Netzwerkprogrammierung 7
T Nach Servern suchen Netzwerkprogrammierung 2
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
L nach Servern suchen Netzwerkprogrammierung 2
M ordner nach socket-übertragung defekt Netzwerkprogrammierung 5
M serialisierung funktioniert nur nach neuer instanzierung Netzwerkprogrammierung 3
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
A Client stürzt nach versand ab Netzwerkprogrammierung 13
M Verbindung nach Serverabsturz wieder aufbauen Netzwerkprogrammierung 9
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
G Port belegt nach Server restart Netzwerkprogrammierung 5
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
N Verarbeitung nach Weiterleitung in Sockets Netzwerkprogrammierung 2
L Frage nach Socket Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben