[ Nemanja Avramović @ 08.03.2008. 11:02 ] @
Zdravo svima,
u školi (Viša ICT) imam predmet Java 1 gde se upoznajemo sa Javom i uopšte objektnim programiranjem, i sve što radimo u školi jesu konzolne aplikacije. Ja sam napravio neku svoju klasu za neka izračunavanja gde koristim standardne tipove podataka (String, integer, ...) i jednu konzolnu aplikaciju i sve to radi lepo. Onda idem na File/New project pa izaberem MIDP application jer želim da napravim sličnu aplikaciju za mobilni telefon, i onu default (Hello world) aplikaciju pokrenem i ona se lepo izvršava u emulatoru. Međutim, kada svoju klasu prebacim u taj package svuda gde koristim String.split(), String.contains(), new Integer(), ... mi prijavljuje sledeće greške:

[att_img]

Kontam da treba nekako da mu "kažem" da treba da u projekat uključi i te standardne klase (šta li su već ), String, Integer, itd... ali tek mesec-dva radim sa Javom (i to uglavnom samo u školi) i nikad se nisam susretao sa ovim, pa bi mi bilo kakva pomoć dobro došla.

Hvala unapred,
Nemanja

p.s. Koristim NetBeans 6.0
[ mucky @ 08.03.2008. 13:44 ] @
Ti imash drugi problem - koristish metode klase String koje ne postoje (String.contains i String.split). Prelistaj Java API docs, klasu String pa vidi koje metode ce ti odgovarati (String.split cesh verovatno zameniti klasom StringTokenizer).

Takodje, int broj iz stringa dobijash metodom Integer.parseInt(String s), i obrati pazhnju da je to statichka metoda (shto ce reci da ne smesh da instancirash objekat klase Integer sa new Integer()).
[ grizzly @ 08.03.2008. 15:12 ] @
Kako ne postoji split()? U Javi za mobilne?
[ mucky @ 08.03.2008. 18:37 ] @
Jednostavno ne postoji String.split(): http://java.sun.com/javame/reference/apis/jsr118/

Bilo bi jako neprirodno da postoji, jer te metode nema u Java SE, a Java ME je podskup (vecinom) od Java SE funkcionalnosti.

StringTokenizer ne postoji u Java ME, ali postoji par implementacija na netu pa vredi potrazhiti.
[ grizzly @ 08.03.2008. 23:47 ] @
String[] split(String regex)
Splits this string around matches of the given regular expression.
String[] split(String regex, int limit)
Splits this string around matches of the given regular expression.

iz mog java SE apija u klasi String

moguce je da te ne razumem sta kazes, nisam ekspert. Ne postoji staticka String.split()...
[ mucky @ 09.03.2008. 00:05 ] @
Statichka definitivno ne postoji, napisao sam String.split() chisto da bi se znalo da je iz String klase :)

Metoda split(String regex) zaista postoji u klasi String, u Java SE od verzije 1.4 (nisam je nikada koristio, nisam ni znao da postoji). Moja greshka, dobro si razumeo da sam pogreshio! :)

Ono shto sigurno znam jeste da ova metoda nikada nije postojala u Java ME, shto ne znachi da nece postojati u nekoj od sledecih verzija MIDP standarda.

Uopshteno, podrshka za regularne izraze ne postoji u Java ME, pre svega zbog zahtevnosti u pogledu procesorskog vremena. split() je znachi najbolje implementirati ruchno, preko indexOf(String str, int fromIndex), ili koristiti neku gotovu klasu koja implementira StringTokenizer funkcionalnost u nekoj meri.
[ Nemanja Avramović @ 09.03.2008. 10:59 ] @
Evo dobio sam ručnu implementaciju split-a na DPTu:

Code:
/**
   * Split string into multiple strings
   * @param original      Original string
   * @param separator     Separator string in original string
   * @return              Splitted string array
   */
  public static String[] split(String original, String separator, boolean includeEmpty)
  {
    Vector nodes = new Vector();
    
    // Parse nodes into vector
    int index = original.indexOf(separator);
    while(index>=0)
    {
      String subs = original.substring(0, index);
      if (subs.length() > 0 || includeEmpty)
        nodes.addElement( subs );
      original = original.substring(index+separator.length());
      index = original.indexOf(separator);
    }
    
    // Get the last node
    if (original.length() > 0  || includeEmpty)
      nodes.addElement( original );
    
    // Create splitted string array
    String[] result = new String[ nodes.size() ];
    if( nodes.size()>0 )
    {
      for(int loop=0; loop<nodes.size(); loop++)
        result[loop] = (String)nodes.elementAt(loop);
    }
    return result;
  }


[Ovu poruku je menjao Nemanja Avramović dana 09.03.2008. u 13:13 GMT+1]