2.4 Οι συμβολοσειρές (strings) στην Java

Οι συμβολοσειρές (strings) χρησιμοποιούνται για να αποθηκεύουν κείμενο.

Στην Java, μια μεταβλητή τύπου String περιέχει μια συλλογή χαρακτήρων που περιβάλλονται από διπλά εισαγωγικά. Οι διπλές εισαγωγικές χρησιμοποιούνται για να δηλώσουμε ότι ο καθορισμένος κώδικας ανήκει σε μια συμβολοσειρά.

// Δημιουργία μεταβλητής greeting και αποθήκευση της τιμής "Hello World"
String greeting = "Hello World";

// Εκτύπωση της τιμής της μεταβλητής greeting στην κονσόλα
System.out.println(greeting);

Το παραπάνω τμήμα κώδικα αποτελείται από δύο γραμμές κώδικα που χρησιμοποιούν τη μεταβλητή greeting και τη μέθοδο println() για την εκτύπωση της τιμής της μεταβλητής στην κονσόλα. Οι σχόλιοι που προστίθενται για επεξήγηση είναι:

  1. Καταχώρηση της τιμής “Hello World” στη μεταβλητή greeting:
// Δημιουργία μεταβλητής greeting και αποθήκευση της τιμής "Hello World"
String greeting = "Hello World";
  1. Εκτύπωση της τιμής της μεταβλητής greeting στην κονσόλα:
// Εκτύπωση της τιμής της μεταβλητής greeting στην κονσόλα
System.out.println(greeting);

Ο κώδικας αυτός θα εκτυπώσει το μήνυμα “Hello World” στην κονσόλα.

Μπορείτε επίσης να συνδυάσετε δύο συμβολοσειρές χρησιμοποιώντας τον τελεστή +:

String firstName = "John"; // Δημιουργία μιας μεταβλητής με το όνομα "firstName" και τιμή "John"
String lastName = "Doe"; // Δημιουργία μιας μεταβλητής με το όνομα "lastName" και τιμή "Doe"
String fullName = firstName + " " + lastName; // Δημιουργία μιας μεταβλητής με το όνομα "fullName" η οποία περιέχει τον πλήρη συνδυασμό του ονόματος και του επωνύμου
System.out.println(fullName); // Εκτύπωση της μεταβλητής "fullName" στην κονσόλα

Ο κώδικας αυτός δημιουργεί δύο μεταβλητές, firstName και lastName, οι οποίες περιέχουν αντίστοιχα το όνομα “John” και το επώνυμο “Doe”. Έπειτα, δημιουργείται μια τρίτη μεταβλητή, fullName, η οποία περιέχει τον πλήρη συνδυασμό του ονόματος και του επωνύμου, διαχωρισμένα από ένα κενό διάστημα.

Τέλος, με τη χρήση της μεθόδου System.out.println(), η μεταβλητή fullName εκτυπώνεται στην κονσόλα, δηλαδή εμφανίζεται το πλήρες ονοματεπώνυμο (“John Doe”).

Στην Java, μια συμβολοσειρά είναι ουσιαστικά ένα αντικείμενο που περιέχει μεθόδους οι οποίες μπορούν να εκτελέσουν διάφορες λειτουργίες πάνω σε αυτές τις συμβολοσειρές. Για παράδειγμα, μπορούμε να βρούμε το μήκος μιας συμβολοσειράς χρησιμοποιώντας τη μέθοδο length():

// Δημιουργία μιας μεταβλητής με την τιμή "Hello World"
String text = "Hello World";

// Αποθήκευση του μήκους του κειμένου στη μεταβλητή "length"
int length = text.length();

// Εκτύπωση του μήκους στην κονσόλα
System.out.println(length);

Τα παραπάνω σχόλια προσθέτουν επεξηγήσεις για τις διάφορες γραμμές κώδικα.

  1. Η γραμμή String text = "Hello World"; δημιουργεί μια μεταβλητή με το όνομα text τύπου String και την τιμή "Hello World". Αυτή η μεταβλητή αποθηκεύει ένα κείμενο.
  2. Η γραμμή int length = text.length(); υπολογίζει το μήκος του κειμένου που αποθηκεύεται στη μεταβλητή text και το αποθηκεύει στη μεταβλητή length. Η μέθοδος length() επιστρέφει τον αριθμό των χαρακτήρων του κειμένου.
  3. Η γραμμή System.out.println(length); εκτυπώνει την τιμή της μεταβλητής length στην κονσόλα. Η μέθοδος println() χρησιμοποιείται για την εκτύπωση των δεδομένων στην οθόνη, σε αυτή την περίπτωση το μήκος του κειμένου.

Αν εκτελέσουμε τον παραπάνω κώδικα, το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι:

11

Αυτό συμβαίνει γιατί η μεταβλητή length περιέχει το μήκος του κειμένου "Hello World", το οποίο είναι 11 χαρακτήρες. Η εντολή System.out.println(length); εκτυπώνει την τιμή της μεταβλητής length στην κονσόλα.

Αναφέροντας το παράδειγμα που αναφέρθηκε παραπάνω, μπορούμε να το γράψουμε σε μορφή κώδικα με τη main() μέθοδο ως εξής:

public class StringLengthExample {
    public static void main(String[] args) {
        String text = "Hello World"; // Δημιουργία μιας μεταβλητής με την τιμή "Hello World"
        int length = text.length(); // Αποθήκευση του μήκους του κειμένου στη μεταβλητή length
        System.out.println(length); // Εκτύπωση του μήκους στην οθόνη
    }
}

Τα σχόλια χρησιμοποιούνται για να εξηγήσουν τον κώδικα και να παρέχουν κατανόηση για το τι κάνει κάθε τμήμα του κώδικα. Στον παραπάνω κώδικα:

  • Η γραμμή String text = "Hello World"; δημιουργεί μια μεταβλητή με την ονομασία text και αποθηκεύει την τιμή "Hello World" σε αυτήν.
  • Η γραμμή int length = text.length(); υπολογίζει το μήκος του κειμένου που αποθηκεύεται στη μεταβλητή text και αποθηκεύει αυτό το μήκος στη μεταβλητή length.
  • Η γραμμή System.out.println(length); εκτυπώνει την τιμή της μεταβλητής length στην οθόνη.

[adinserter block=”2″]

Όταν εκτελέσετε τον παραπάνω κώδικα, το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι:

11

Αυτό συμβαίνει επειδή η μέθοδος length() επιστρέφει το μήκος του κειμένου που περιέχεται στη μεταβλητή text, που στην περίπτωση μας είναι το "Hello World", το οποίο αποτελείται από 11 χαρακτήρες. Έτσι, το αποτέλεσμα που εκτυπώνεται στην οθόνη είναι το 11.

Στη Java, έχουμε πολλές μεθόδους συμβολοσειράς στη διάθεσή μας, όπως οι μέθοδοι toUpperCase() και toLowerCase(). Οι μέθοδοι αυτές χρησιμοποιούνται για τον μετασχηματισμό των χαρακτήρων μιας συμβολοσειράς σε κεφαλαία και πεζά γράμματα αντίστοιχα.

Για παράδειγμα:

String text = "Hello World";
String uppercaseText = text.toUpperCase(); // Μετατροπή της συμβολοσειράς σε κεφαλαία γράμματα
String lowercaseText = text.toLowerCase(); // Μετατροπή της συμβολοσειράς σε πεζά γράμματα

System.out.println(uppercaseText); // Εκτύπωση: "HELLO WORLD"
System.out.println(lowercaseText); // Εκτύπωση: "hello world"

Οι μέθοδοι toUpperCase() και toLowerCase() εφαρμόζονται στην αρχική συμβολοσειρά και επιστρέφουν μια νέα συμβολοσειρά που περιέχει τους χαρακτήρες σε κεφαλαία ή πεζά γράμματα αντίστοιχα.

Οι παραπάνω μέθοδοι δεν αλλάζουν την αρχική συμβολοσειρά, αλλά δημιουργούν μια νέα συμβολοσειρά με τα αντίστοιχα κεφαλαία ή πεζά γράμματα.

Η μέθοδος indexOf() χρησιμοποιείται για να βρεθεί η θέση της πρώτης εμφάνισης μιας συγκεκριμένης υποσυμβολοσειράς ή ενός χαρακτήρα μέσα σε μια αρχική συμβολοσειρά. Αν η υποσυμβολοσειρά ή ο χαρακτήρας δεν βρεθεί στην αρχική συμβολοσειρά, η μέθοδος επιστρέφει την τιμή -1.

Η σύνταξη της indexOf() είναι η εξής:

int indexOf(String textToFind)

Παρακάτω παρατίθενται παραδείγματα χρήσης της indexOf():

// Δημιουργία μιας μεταβλητής με την τιμή του κειμένου
String text = "The quick brown fox jumps over the lazy dog";

// Αναζήτηση της θέσης της λέξης "fox" μέσα στο κείμενο και αποθήκευση της θέσης στη μεταβλητή position1
int position1 = text.indexOf("fox");

// Αναζήτηση της θέσης της λέξης "dog" μέσα στο κείμενο και αποθήκευση της θέσης στη μεταβλητή position2
int position2 = text.indexOf("dog");

// Αναζήτηση της θέσης της λέξης "cat" μέσα στο κείμενο και αποθήκευση της θέσης στη μεταβλητή position3
int position3 = text.indexOf("cat");

System.out.println("Position of 'fox': " + position1);
System.out.println("Position of 'dog': " + position2);
System.out.println("Position of 'cat': " + position3);

Ο παραπάνω κώδικας περιέχει τρεις εντολές για την εύρεση θέσης συγκεκριμένων λέξεων μέσα σε ένα κείμενο. Ας αναλύσουμε τι κάνει ο κάθε κομμάτι κώδικα ξεχωριστά:

  1. String text = "The quick brown fox jumps over the lazy dog";
    Δημιουργεί μια μεταβλητή με την τιμή του κειμένου “The quick brown fox jumps over the lazy dog”.
  2. int position1 = text.indexOf("fox");
    Αναζητεί τη θέση της λέξης “fox” μέσα στο κείμενο που βρίσκεται στη μεταβλητή text και αποθηκεύει τη θέση αυτή στη μεταβλητή position1. Εάν η λέξη “fox” βρεθεί, η μεταβλητή position1 θα πάρει τη θέση (δηλαδή τον αριθμό του πρώτου χαρακτήρα) όπου βρίσκεται η λέξη. Εάν η λέξη δεν βρεθεί, η τιμή της position1 θα είναι -1.
  3. int position2 = text.indexOf("dog");
    Παρόμοια με το προηγούμενο, αναζητεί τη θέση της λέξης “dog” μέσα στο κείμενο και αποθηκεύει τη θέση αυτή στη μεταβλητή position2.
  4. int position3 = text.indexOf("cat");
    Εδώ, αναζητεί τη θέση της λέξης “cat” μέσα στο κείμενο και αποθηκεύει τη θέση αυτή στη μεταβλητή position3.

Συνολικά, ο κώδικας εκτελεί αναζητήσεις για τις λέξεις “fox”, “

dog” και “cat” στο κείμενο και αποθηκεύει τις αντίστοιχες θέσεις τους σε μεταβλητές. Αν η λέξη βρεθεί, η θέση της επιστρέφεται, αλλιώς επιστρέφεται η τιμή -1.

Το αποτέλεσμα στην οθόνη θα είναι:

Position of 'fox': 16
Position of 'dog': 40
Position of 'cat': -1

Αυτό σημαίνει ότι η λέξη “fox” βρίσκεται στη θέση 16 του κειμένου, η λέξη “dog” βρίσκεται στη θέση 40, ενώ η λέξη “cat” δε βρέθηκε και επομένως η τιμή -1 επιστρέφεται.

Στην Java οι θέσεις (positions) στα strings αριθμούνται από το μηδέν. Άρα η πρώτη θέση έχει δείκτη 0, η δεύτερη έχει δείκτη 1, η τρίτη έχει δείκτη 2 κ.ο.κ.

Ο συντελεστής + μπορεί να χρησιμοποιηθεί μεταξύ συμβολοσειρών για να τις συνδέσει. Αυτό ονομάζεται συνένωση συμβολοσειρών:

[adinserter block=”3″]

Παράδειγμα

// Δημιουργία μεταβλητών για τον πρώτο και τον τελευταίο όνομα
String firstName = "John";
String lastName = "Doe";

// Συνένωση των δύο ονομάτων για να δημιουργηθεί το πλήρες όνομα
String fullName = firstName + " " + lastName;

// Εκτύπωση του πλήρους ονόματος
System.out.println(fullName);

Ο παραπάνω κώδικας πραγματοποιεί τις παρακάτω ενέργειες:

  1. Δημιουργεί δύο μεταβλητές τύπου String με ονόματα firstName και lastName και αντιστοιχεί σε αυτές τιμές. Στη συγκεκριμένη περίπτωση, ορίζονται τα ονόματα “John” και “Doe” αντίστοιχα.
  2. Συνδυάζει τις δύο μεταβλητές firstName και lastName με τη χρήση του τελεστή συνένωσης +, και αποθηκεύει το αποτέλεσμα στη μεταβλητή fullName. Έτσι, η τιμή της fullName θα είναι η συμβολοσειρά “John Doe”.
  3. Εκτυπώνει την τιμή της μεταβλητής fullName στην κονσόλα χρησιμοποιώντας τη μέθοδο System.out.println(). Αυτό σημαίνει ότι η συμβολοσειρά “John Doe” θα εμφανιστεί στην οθόνη του υπολογιστή.

Το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι η συμβολοσειρά “John Doe”. Αυτό συμβαίνει επειδή ο κώδικας εκτελεί την εντολή System.out.println(fullName), όπου η μεταβλητή fullName περιέχει την τιμή “John Doe”. Η μέθοδος System.out.println() χρησιμοποιείται για να εμφανίσει μια συμβολοσειρά στην κονσόλα και αυτή θα εμφανιστεί σε μια νέα γραμμή. Έτσι, το αποτέλεσμα που θα δούμε στην οθόνη θα είναι:

John Doe

Μια εναλλακτική μέθοδος που μπορείτε να χρησιμοποιήσετε για να συνδέσετε δύο συμβολοσειρές είναι η concat(). Η μέθοδος concat() εκτελεί τη συνένωση δύο συμβολοσειρών και επιστρέφει μια νέα συμβολοσειρά που περιέχει το αποτέλεσμα.

Για παράδειγμα:

// Δημιουργία μεταβλητών για τον πρώτο και τον τελευταίο όνομα
String firstName = "John";
String lastName = "Doe";

// Συνένωση του πρώτου και του τελευταίου ονόματος για να δημιουργηθεί το πλήρες όνομα
String fullName = firstName.concat(" ").concat(lastName);

// Εκτύπωση του πλήρους ονόματος στην οθόνη
System.out.println(fullName);

Ο παραπάνω κώδικας πραγματοποιεί τις εξής ενέργειες:

  1. Ορίζει δύο μεταβλητές, την firstName που περιέχει την τιμή “John” και την lastName που περιέχει την τιμή “Doe”. Αυτές οι μεταβλητές αποθηκεύουν το πρώτο και το τελευταίο όνομα αντίστοιχα.
  2. Χρησιμοποιεί τη μέθοδο concat() για να συνενώσει το firstName, ένα κενό διάστημα και το lastName, δημιουργώντας έτσι ένα πλήρες όνομα. Το αποτέλεσμα της συνένωσης αποθηκεύεται στη μεταβλητή fullName.
  3. Χρησιμοποιεί τη μέθοδο println() της κλάσης System.out για να εμφανίσει την τιμή της μεταβλητής fullName στην οθόνη, ακολουθούμενη από μια νέα γραμμή.

Έτσι, ο κώδικας εμφανίζει το πλήρες όνομα “John Doe” στην οθόνη.

Εάν συνδέσετε δύο συμβολοσειρές, το αποτέλεσμα θα είναι μια συμβολοσειρά που περιέχει τη συνένωσή τους:

Παράδειγμα με δύο συμβολοσειρές αριθμών:

String x = "10";  // Δημιουργία μεταβλητής x και ανάθεση της τιμής "10"
String y = "5";   // Δημιουργία μεταβλητής y και ανάθεση της τιμής "5"
String result = x + y;  // Συνένωση των δύο συμβολοσειρών x και y και αποθήκευση του αποτελέσματος στη μεταβλητή result
System.out.println(result);  // Εκτύπωση της τιμής της μεταβλητής result στην κονσόλα

Ο παραπάνω κώδικας πραγματοποιεί τη συνένωση (concatenation) δύο συμβολοσειρών και εκτυπώνει το αποτέλεσμα στην κονσόλα.

Αρχικά, δημιουργούνται δύο μεταβλητές x και y, και ανατίθενται οι τιμές "10" και "5" αντίστοιχα. Έπειτα, η γραμμή κώδικα String result = x + y; πραγματοποιεί τη συνένωση των δύο συμβολοσειρών x και y, δημιουργώντας την νέα συμβολοσειρά "105", και αποθηκεύει το αποτέλεσμα στη μεταβλητή result.

Τέλος, με την εντολή System.out.println(result); εκτυπώνεται η τιμή της μεταβλητής result στην κονσόλα. Στην περίπτωση αυτή, θα εμφανιστεί στην οθόνη η συμβολοσειρά "105".

Όταν πραγματοποιείτε την πρόσθεση ενός αριθμού με μια συμβολοσειρά στη Java, το αποτέλεσμα θα είναι μια συμβολοσειρά συνένωσης. Αυτό συμβαίνει επειδή η συμβολοσειρά λαμβάνει τον αριθμό και τον μετατρέπει σε μορφή συμβολοσειράς πριν πραγματοποιηθεί η συνένωση.

Παράδειγμα:

int x = 10; // Δημιουργία μιας μεταβλητής "x" και αρχικοποίησή της με την τιμή 10
String y = " apples"; // Δημιουργία μιας μεταβλητής "y" τύπου String και αρχικοποίησή της με την τιμή " apples"
String result = "I have " + x + y; // Δημιουργία μιας μεταβλητής "result" τύπου String και αρχικοποίησή της με το συνδυασμό των τιμών των "x" και "y" συμπεριλαμβανομένου του κειμένου "I have"
System.out.println(result); // Εκτύπωση της μεταβλητής "result" στην οθόνη

Ο παραπάνω κώδικας κάνει τα εξής:

  1. Δημιουργεί μια μεταβλητή x τύπου int και την αρχικοποιεί με την τιμή 10.
  2. Δημιουργεί μια μεταβλητή y τύπου String και την αρχικοποιεί με την τιμή ” apples”.
  3. Δημιουργεί μια μεταβλητή result τύπου String και την αρχικοποιεί με τη συνένωση του κειμένου “I have “, της τιμής της μεταβλητής x και της τιμής της μεταβλητής y. Το αποτέλεσμα θα είναι “I have 10 apples”.
  4. Χρησιμοποιεί τη μέθοδο System.out.println() για να εκτυπώσει την τιμή της μεταβλητής result στην οθόνη. Αυτό θα εμφανίσει το κείμενο “I have 10 apples” στην κονσόλα ή στην οθόνη εξόδου.

Για να γράψουμε συμβολοσειρές στην Java, πρέπει να τις τοποθετούμε μέσα σε εισαγωγικά. Αυτό είναι απαραίτητο για να αναγνωρίσει η Java τη συμβολοσειρά ως έγκυρη και να μην προκαλέσει σφάλματα.

String txt = "We are the so-called "Vikings" from the north.";

Για να αποφύγετε το παραπάνω σφάλμα, μπορείτε να χρησιμοποιήσετε το χαρακτήρα backslash () για να δηλώσετε τα εισαγωγικά μέσα στη συμβολοσειρά:

String txt = "We are the so-called \"Vikings\" from the north.";

Αυτό θα δημιουργήσει τη σωστή συμβολοσειρά και η έξοδος θα είναι:

We are the so-called "Vikings" from the north.

Οι κοινές ακολουθίες διαφυγής χαρακτήρων που χρησιμοποιούνται στην Java είναι οι εξής:

  • \n: Προκαλεί μια νέα γραμμή.
  • \r: Προκαλεί μια επιστροφή κέραιας (carriage return).
  • \t: Προκαλεί μια εναλλαγή καρτελών (tab).
  • \b: Προκαλεί μια επιστροφή στην αρχή (backspace).
  • \f: Προκαλεί μια αλλαγή σελίδας (form feed).

Αυτές οι ακολουθίες διαφυγής χρησιμοποιούνται για να εισαχθούν ειδικοί χαρακτήρες σε κείμενο, που αλλιώς θα ήταν δύσκολο να αναπαρασταθούν ή να εκτυπωθούν. Καθένας από αυτούς τους χαρακτήρες έχει μια συγκεκριμένη λειτουργία, όπως η δημιουργία νέας γραμμής, εναλλαγή καρτελών, επιστροφή στην αρχή και άλλες.

Μπορείτε να χρησιμοποιήσετε αυτούς τους κωδικούς στις συμβολοσειρές για να δημιουργήσετε ειδικούς χαρακτήρες. Παρακάτω είναι ένα παράδειγμα:

System.out.println("Hello\nWorld!");

Εξοδος:

Hello
World!
9 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων