# Im eingelesenen Text nach einem Wort suchen



## benimoe (9. Dez 2006)

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)

```
<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 (9. Dez 2006)

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)


----------



## Guest (9. Dez 2006)

danke ersma für die hilfe.

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


```
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 (9. Dez 2006)

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.


----------



## Gast (9. Dez 2006)

kannste dat vielleicht anhand eines beispiels veranschaulichen??


----------



## The_S (9. Dez 2006)

String blub = "Datei.txt";
String extension = blub.substring(blub.lastIndexOf("."));


----------



## Guest (9. Dez 2006)

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



```
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


----------



## Guest (9. Dez 2006)

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 :
> 
> 
> 
> ...


----------



## Guest (9. Dez 2006)

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


----------



## SlaterB (9. Dez 2006)

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?


----------



## Gast (9. Dez 2006)

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


----------



## MrChance (9. Dez 2006)

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


```
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);
			}
		}
```


----------



## SlaterB (9. Dez 2006)

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


----------



## Gast (10. Dez 2006)

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 

```
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


----------



## SlaterB (10. Dez 2006)

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

```
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.....


----------



## Guest (10. Dez 2006)

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:


```
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


----------



## SlaterB (10. Dez 2006)

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:


```
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?


----------



## Guest (10. Dez 2006)

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.


----------



## SlaterB (10. Dez 2006)

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?


----------



## Guest (10. Dez 2006)

```
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);}}
```


----------



## SlaterB (11. Dez 2006)

dann hilft dir vielleicht folgendes weiter


```
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..


----------



## Guest (14. Dez 2006)

hallo!

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


```
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*


----------



## SlaterB (15. Dez 2006)

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)


----------



## Gast (16. Dez 2006)

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.


----------



## Gast (16. Dez 2006)

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


----------



## SlaterB (16. Dez 2006)

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..


----------



## Gast (17. Dez 2006)

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.


----------



## SlaterB (18. Dez 2006)

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?


----------



## Gast (18. Dez 2006)

dat funktioniert nicht, du meinst also:

```
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.


----------



## Gast (18. Dez 2006)

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


----------



## SlaterB (18. Dez 2006)

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


----------



## Gast (20. Dez 2006)

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 (20. Dez 2006)

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:


```
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 ...


----------



## Guest (23. Dez 2006)

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] )


----------



## Gast (26. Dez 2006)

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

mfg "gast"


----------



## SlaterB (26. Dez 2006)

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


----------



## Gast (13. Jan 2007)

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


----------



## SlaterB (13. Jan 2007)

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


----------



## Gast (14. Jan 2007)

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??


----------



## SlaterB (14. Jan 2007)

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:

```
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..)


----------



## Gast (20. Jan 2007)

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


----------



## Gast (11. Mai 2007)

keiner ne ahnung?


----------



## anfänger15 (11. Mai 2007)

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)


----------



## Gast (12. Mai 2007)

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


----------



## nuely (12. Mai 2007)

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:


```
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.


----------



## nuely (12. Mai 2007)

achja. Falls du dich trotzdem mit dem Sicherheitskonzept von Java beschäftigen willst empfehle ich 24.3 und 24.4 unter http://www.galileocomputing.de/open...24_003.htm#mje5b3a3448bd012ef24b27a011faa8897


----------



## Gast (6. Jun 2007)

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


----------

