import java.util.*; import java.io.*; import java.net.*; import java.lang.*; public class Analyys{ String link; boolean[] s_leitud; boolean[] leitud; public Analyys(int nr){ if (nr>0){ s_leitud = new boolean[nr]; leitud = new boolean[nr]; for (int i=0; i"); if (pikkus>5000){ if ((pikkus-5000)>algus) lopuosa=(pikkus-5000); }else lopuosa=algus; int lopp=sisend.indexOf("", lopuosa); if ((algus>-1) & (lopp>-1) & (algus", true); tulem=st.nextToken(); while (st.hasMoreTokens()) { // 5 algust laheb lahti // kui veel pole leitud if (!leitud_title) { while ((veel) & (st.hasMoreTokens())) { // 7 algust if (!algus){ // otsitakse title algust if ((tulem.equals("<")) && (st.hasMoreTokens()) && (st.nextToken().equalsIgnoreCase("title"))) algus=true; else if (st.hasMoreTokens()) tulem=st.nextToken(); // kui on title algus leitud } else { tulem=st.nextToken(); if ((vaiksem) & (tulem.equalsIgnoreCase("/title"))) veel=false; if (tulem.equals("<")) vaiksem=true; else vaiksem=false; if (veel) strBuf.append(tulem); } } // end while leitud_title=true; String tekst=korrasta(new String(strBuf)); a.leitud=otsiTeksti(tekst, otsi, tundlik); a.link=url; v.addElement(a); a= new Analyys(otsi.length); // title uuritud } else { // vahele kui vahetult > jargi on < tuleb siis ja ei vota uut tykki if (!vahele) tulem=st.nextToken(); vahele=false; if ((tulem.equals("<")) & (st.hasMoreTokens())) { // vaja, et eristada otsi lingi juurde kuuluvat teksti vobj.leitud=false; String juhtrida=st.nextToken(); if (!juhtrida.startsWith("/")) { vobj=lingid(juhtrida, url, prot); if (vobj.leitud) { // kui on juba m]ni link leitud siis pane vana // masiivi ja tee uus objekt if (leitud_url) { v.addElement(a); a= new Analyys(otsi.length); } else leitud_url=true; a.link=vobj.tekst; // a.link=a.p_link(); } // if (vobj.leitud) } // if (!tulem.startsWinth("/") } else if ((tulem.equals(">")) & (st.hasMoreTokens())) { tulem=st.nextToken(); if (!tulem.equals("<")) { if (vobj.leitud) { a.s_leitud=margiLeitud(a.s_leitud, tundlik, tulem, otsi); vobj.leitud=false; } else a.leitud=margiLeitud(a.leitud, tundlik, tulem, otsi); } else vahele=true; // if (!tulem...."<" } // if tulem.equals(">") } // enne if (tulem.equals("<") ... } // end while (st.hasMoreTokens koige tahtsam if (a.link==null) a.link=url; v.addElement(a); } // end if (kasHTML()) else { a.link=url; a.leitud=otsiTeksti(sisend, otsi, tundlik); v.addElement(a); } // tulemuse valjastamine Analyys[] tulemus = new Analyys[v.size()]; Object[] o=v.toArray(tulemus); return tulemus; } catch (Exception viga3) { System.out.println(viga3 + "uuriteksti lopp"); return null; } } public static void kiri(boolean sisse, boolean sis){ try{ PrintWriter f = new PrintWriter( new FileWriter("oma.ttt", true)); String s=""; if (sisse) s="true"; else s="false"; if (sis) s += "new "; else s +="String"; f.println(s); f.close(); } catch (IOException v){ System.out.println(v); } } public static boolean[] otsiTeksti(String sisse, String[] ots, boolean tundlik) { if (ots.equals(null)){ boolean[] pol={true}; return pol; } else if (sisse!=null){ if (!tundlik) sisse=sisse.toLowerCase(); boolean[] on_eiole= new boolean[ots.length]; for (int nr=0; nr<ots.length; nr++) if (sisse.indexOf(ots[nr])>=0){ on_eiole[nr]=true; } else{ on_eiole[nr]=false; } return on_eiole; }else { boolean[] vasta= new boolean[ots.length]; for (int nr2=0; nr2<ots.length; nr2++) vasta[nr2]=false; return vasta; } } public static String korrasta(String sisend) { boolean koik=true; String sisu=null, vahe=null; boolean vahele=false; StringTokenizer st = new StringTokenizer(sisend, "<>", true); while ((st.hasMoreTokens()) & (koik)){ if(!vahele) vahe=st.nextToken(); vahele=false; if ((st.hasMoreTokens()) && (vahe.equals(">"))){ vahe=st.nextToken(); if(vahe.equals("<")) vahele=true; else sisu +=vahe; } else if (st.hasMoreTokens()){ if (vahe.equals("<")){ vahe=st.nextToken(); if (vahe.equals(">")){ vahele=true; } // if ">" }else sisu +=vahe; } else koik=false; } // end while sisu.trim(); return sisu; } public static boolean[] margiLeitud(boolean[] t, boolean tun, String str, String[] ms) { boolean[] on_eiole=otsiTeksti(str, ms, tun); if(ms.length>0){ for (int nr=0; nr<t.length; nr++) if (on_eiole[nr]) t[nr]=true; return t; }else{ boolean[] b= new boolean[1]; b[0]=true; return b; } } // end margileitud public static Vaheobj lingid(String juhtrida, String url, String[] prot) throws IOException { try{ String kontrollitud=""; Vaheobj vh= new Vaheobj(); StringTokenizer tag=new StringTokenizer(juhtrida, " \n\t=\""); while(tag.hasMoreTokens()){ // leitakse link href on tema ta"his if(tag.nextToken().toLowerCase().equals("href")& tag.hasMoreTokens()){ String link=tag.nextToken(); if ((!link.startsWith("#")) & (link!=null)) { String absurl=URLabi.absoluutseks(url, link); kontrollitud=new String(URLabi.urliks(absurl).toString()); String proto=kontrollitud.substring(0, kontrollitud.indexOf(":")); boolean on=false; int nr=0; while((nr<prot.length) && (!on)){ if (proto.equalsIgnoreCase(prot[nr])) on=true; nr++; } // on=true kui protokoll on yks sobivatest vh.leitud=on; } } } if (vh.leitud) vh.tekst=kontrollitud; return vh; } catch (IOException v){ Hd hd1 = new Hd(); hd1.kiri(v.toString()+ " Analyys.lingid(...)"); return new Vaheobj(); } } // lingid ots public String p_link(){ String tulem=u_a.refref(this.link); if (tulem==null) return this.link; else return tulem; } } // end all Analyys