Evangeli Δημοσ. 11 Ιουλίου 2009 Δημοσ. 11 Ιουλίου 2009 Καλησπέρα. Η κάτωθι συνάρτηση δουλεύει τέλεια για αναζήτηση λέξεων σε μεγάλα Strings. Δυστυχώς όμως, αν η λέξη που αναζητούμε περιέχει ψηφία δημιουργείτε πρόβλημα! Μήπως γνωρίζετε ως μπορώ να μετατρέψω μια λέξη της μορφής T00:00:00.000 σε χαρακτήρες? Βαγγέλης. >public static void findString(String content, String searchWord) { String regex = "\\b" + searchWord + "\\b"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(content); int count = 0; System.out.print("\"" + searchWord + "\" is located at positions"); while (matcher.find()) { count++; System.out.print(" " + matcher.start()); } System.out.println("!\n\"" + searchWord + "\" was found " + count + " times in toto!"); }
-nick- Δημοσ. 11 Ιουλίου 2009 Δημοσ. 11 Ιουλίου 2009 θα ελεγα πως πρεπει να τροποποιήσεις την regex και να συμπεριλαβεις το "\\d" και τους quantifiers. http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
Evangeli Δημοσ. 11 Ιουλίου 2009 Μέλος Δημοσ. 11 Ιουλίου 2009 nick[;2814736']θα ελεγα πως πρεπει να τροποποιήσεις την regex και να συμπεριλαβεις το "\\d" και τους quantifiers. http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Δεν το κατάφερα. Θα μπορούσες να μου δώσεις την τιμή του regex όπως πιστεύεις πρέπει να είναι και να το δοκιμάσω εγώ?
-nick- Δημοσ. 11 Ιουλίου 2009 Δημοσ. 11 Ιουλίου 2009 Δεν το κατάφερα. Θα μπορούσες να μου δώσεις την τιμή του regex όπως πιστεύεις πρέπει να είναι και να το δοκιμάσω εγώ? Αυτες τις μερες ειδικά δεν εχω πολυ χρονο, δεν το εχω δουλεψει πολυ και εγω με τα regular expressions.btw οταν δινεις μια λεξε ξερω γω string word = "Ssasa551" τα 551 ΕΙΝΑΙ χαρακτηρες. Απλα υποθετω πως το regex ξεχωριζει αν αυτος ο χαρακτηρας ειναι ψηφιο η αν ειναι γραμμα της αλφαβητου Δοκιμασε το εξης : String[] s = new String[1000]; s = someBigString.split("\\s"); // opoy someBigString to megalo string pano ]// sto opoio ginetai h anazhthsh , tora o pinakas s periexei oles tis lekseis. οποτε μετα ψαχνεις στον πινακα s για την ζητουμενη λεξη που θες (οχι με == ομως αλλα με .equals, υποθετω γνωριζεις λιγο απο java api , σωστα? )
virxen75 Δημοσ. 12 Ιουλίου 2009 Δημοσ. 12 Ιουλίου 2009 και γιατιί δεν χρησιμοποιείς την μέθοδο των string .indexOf();
Evangeli Δημοσ. 12 Ιουλίου 2009 Μέλος Δημοσ. 12 Ιουλίου 2009 και γιατιί δεν χρησιμοποιείς την μέθοδο των string.indexOf(); "Returns the index within this string of the first occurrence of the specified character..." Επομένως δεν με εξυπηρετεί καθώς το εν λόγο pattern εντοπίζετε πάνω από 150*10 φορές στο κείμενο!!! Απλα υποθετω πως το regex ξεχωριζει αν αυτος ο χαρακτηρας ειναι ψηφιο η αν ειναι γραμμα της αλφαβητου Ναι' date=' κι εγώ αυτό βλέπω... Δοκιμασε το εξης : String[] s = new String[1000]; s = someBigString.split("\\s"); // opoy someBigString to megalo string pano ]// sto opoio ginetai h anazhthsh , tora o pinakas s periexei oles tis lekseis. Μάλλον είναι αδύνατο, γιατί το κείμενο μου είναι τεράστιο... Πάρα πολλοί χαρακτήρες με μέγεθος .txt file περί τα 4MB! Κανείς άλλος που μπορεί να βοηθήσει με την αρχική πρόταση του nick?
virxen75 Δημοσ. 12 Ιουλίου 2009 Δημοσ. 12 Ιουλίου 2009 "Returns the index within this string of the first occurrence of the specified character..." Επομένως δεν με εξυπηρετεί καθώς το εν λόγο pattern εντοπίζετε πάνω από 150*10 φορές στο κείμενο!!! μάλλον κάτι ξέχασες να διαβάσεις...... > public class TestIndexOf{ public TestIndexOf(){ String test="1posesdhgdhgdfhposesdfghdfdfghposesdfghdfghdfposesdfhgdfghdfposessdfgsdfgposes"; System.out.println("1η χρηση του indexOf.To poses βρέθηκε στην θέση---->"+test.indexOf("poses")); System.out.println("2η χρηση του indexOf.To poses βρέθηκε στην θέση---->"+test.indexOf("poses",1)); //2η χρήση μετά από ποια θέση να κοιτάξω? //πως τώρα με την 2η χρήση θα πάρω όλες τις θέσεις που βρέθηκε το string μου? int a=0; do{ a=test.indexOf("poses",a); if (a>=0) { System.out.println("\nτο poses βρέθηκε στην θέση:"+a); a++;} }while (a>=0); } public static void main (String args[]) { new TestIndexOf(); } }
Evangeli Δημοσ. 13 Ιουλίου 2009 Μέλος Δημοσ. 13 Ιουλίου 2009 Το πρόβλημα λύνετε με την δική μου συνάρτηση αν αντικαταστίσεις την τιμή του regex απο regex = \\bT00:00:00.000\\b; σε regex = T\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d; με τα \\d να εκφράζουν (οποιοδήποτε ψηφίο). Τώρα έχω τα indexies για την αρχή της λέξης! Όμως πως διαβάζω οτι βρίσκετε πριν ή μετα απο αυτή? Αν υποθέσουμε οτι το μεγάλο string ονομάζετε text δοκίμασα με πχ text[index - 1] για το χαρακτήρα ακριβώς πριν την λέξη που αναζητίσαμε αλλα τζίφος . Please όποιος γνωρίζει ας βοηθήσει...
virxen75 Δημοσ. 14 Ιουλίου 2009 Δημοσ. 14 Ιουλίου 2009 αφού επιμένεις με το regex... > import java.util.regex.*; public class Test11{ public Test11(){ String text="mouT01:00:00.000souT02:00:00.000touT03:00:00.000masT04:00:00.000tousT05:00:00.000"; findString(text); } public void findString(String content) { String regex = "T\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(content); int count = 0; while (matcher.find()) { count++; String found=content.substring(matcher.start(),matcher.start()+13); System.out.println(">" + matcher.start()+"---->"+found); } System.out.println("\n was found " + count + " times in toto!"); } public static void main(String []args){ new Test11(); } } προσάρμοσε το στον κώδικα σου αν δεν τα καταφέρεις στείλε τον κώδικα που έχεις φτιάξει τώρα να στο φτιάξω εκεί.
Evangeli Δημοσ. 14 Ιουλίου 2009 Μέλος Δημοσ. 14 Ιουλίου 2009 αφού επιμένεις με το regex... Σας ευχαριστώ πάρα πολύ! Είναι όπως ακριβώς το ήθέλα... Παρακαλώ τους admins να κάνουν edit τον τίτλο σε "Java - findString function --> Επιλύθηκε" Βαγγέλης.
Evgenios1 Δημοσ. 14 Ιουλίου 2009 Δημοσ. 14 Ιουλίου 2009 Σας ευχαριστώ πάρα πολύ! Είναι όπως ακριβώς το ήθέλα... Παρακαλώ τους admins να κάνουν edit τον τίτλο σε "Java - findString function --> Επιλύθηκε" Βαγγέλης. double click στο τιτλο
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.