Προς το περιεχόμενο

Regular Expressions in Java [Λύθηκε]


Evangeli

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα. Η κάτωθι συνάρτηση δουλεύει τέλεια για αναζήτηση λέξεων σε μεγάλα 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[;2814736']θα ελεγα πως πρεπει να τροποποιήσεις την regex και να συμπεριλαβεις το "\\d" και τους quantifiers.

 

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

 

Δεν το κατάφερα. :( Θα μπορούσες να μου δώσεις την τιμή του regex όπως πιστεύεις πρέπει να είναι και να το δοκιμάσω εγώ?

Δημοσ.
Δεν το κατάφερα. :( Θα μπορούσες να μου δώσεις την τιμή του 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 , σωστα? )

Δημοσ.
και γιατιί δεν χρησιμοποιείς την μέθοδο των 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?

Δημοσ.

"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();
 }
}

Δημοσ.

Το πρόβλημα λύνετε με την δική μου συνάρτηση αν αντικαταστίσεις την τιμή του 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 όποιος γνωρίζει ας βοηθήσει...

Δημοσ.

αφού επιμένεις με το 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();
}

}

 

προσάρμοσε το στον κώδικα σου

αν δεν τα καταφέρεις στείλε τον κώδικα που έχεις φτιάξει τώρα να στο φτιάξω

εκεί.

Δημοσ.
αφού επιμένεις με το regex...

 

Σας ευχαριστώ πάρα πολύ! Είναι όπως ακριβώς το ήθέλα... Παρακαλώ τους admins να κάνουν edit τον τίτλο σε "Java - findString function --> Επιλύθηκε"

 

Βαγγέλης.

Δημοσ.
Σας ευχαριστώ πάρα πολύ! Είναι όπως ακριβώς το ήθέλα... Παρακαλώ τους admins να κάνουν edit τον τίτλο σε "Java - findString function --> Επιλύθηκε"

 

Βαγγέλης.

 

double click στο τιτλο:-)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...