JavaRush /בלוג Java /Random-HE /זרמים ומיתרים I/O ב-Java
articles
רָמָה

זרמים ומיתרים I/O ב-Java

פורסם בקבוצה
מחלקה מספריית החבילות של Java משמשת להזנת נתונים Scanner. זרמים ומיתרים של I/O ב-Java - 1יש לייבא מחלקה זו לתוכנית שבה ישמש אותה. זה נעשה לפני שהשיעור הציבורי מתחיל בקוד התוכנית. למחלקה יש שיטות לקריאת התו הבא מסוג נתון מזרם הקלט הסטנדרטי, וכן לבדיקת קיומו של תו כזה. כדי לעבוד עם זרם קלט, עליך ליצור אובייקט ממחלקת ה-Scanner , ולציין במהלך היצירה לאיזה זרם קלט הוא ישויך. זרם הקלט הסטנדרטי (מקלדת) ב-Java מיוצג על ידי אובייקט - System.in. וזרם הפלט הסטנדרטי (תצוגה) הוא אובייקט שכבר מוכר לך System.out. יש גם זרם סטנדרטי לפלט שגיאות - System.err, אבל העבודה איתו היא מעבר להיקף הקורס שלנו.
import java.util.Scanner; // импортируем класс
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // создаём an object класса Scanner
        int i = 2;
        System.out.print("Введите целое число: ");
        if(sc.hasNextInt()) { // возвращает истину если с потока ввода можно считать целое число
          i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную
          System.out.println(i*2);
        } else {
          System.out.println("Вы ввели не целое число");
        }
    }
}
השיטה hasNextDouble()המיושמת על אובייקט של המחלקה Scannerבודקת אם ניתן לקרוא מספר אמיתי של סוג מזרם הקלט double, והשיטה nextDouble()קוראת אותו. אם תנסה לקרוא ערך מבלי לבדוק אותו תחילה, ייתכן שתקבל שגיאה במהלך הפעלת התוכנית (הבאגים לא יזהה שגיאה כזו מראש). לדוגמה, נסה להזין מספר אמיתי בתוכנית שלהלן:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double  i = sc.nextDouble(); // если ввести букву s, то случится ошибка во время исполнения
        System.out.println(i/3);
    }
}
ישנה גם שיטה nextLine()שמאפשרת לקרוא רצף שלם של תווים, כלומר. string, כלומר הערך המתקבל בשיטה זו חייב להיות מאוחסן באובייקט מחלקה String. בדוגמה הבאה נוצרים שני אובייקטים כאלה, ואז נכתב אליהם קלט משתמש בזה אחר זה, ואז מוצגת מחרוזת אחת על המסך, המתקבלת על ידי שילוב של רצפי התווים שהוזנו.
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1, s2;
        s1 = sc.nextLine();
        s2 = sc.nextLine();
        System.out.println(s1 + s2);
    }
}
ישנה גם שיטה hasNext()שבודקת האם נותרו תווים בזרם הקלט. למחלקה Stringיש הרבה שיטות שימושיות שניתן ליישם על מחרוזות (לפני שם השיטה נציין את סוג הערך שהיא מחזירה):
  1. int length()- מחזירה את אורך המחרוזת (מספר התווים בה);
  2. boolean isEmpty()- בודק אם המחרוזת ריקה;
  3. String replace(a, b)- מחזירה מחרוזת שבה התו a (מילולית או משתנה מסוג char) מוחלף בתו b;
  4. String toLowerCase()- מחזירה מחרוזת שבה כל התווים במחרוזת המקורית מומרים לאותיות קטנות;
  5. String toUpperCase()- מחזירה מחרוזת שבה כל התווים במחרוזת המקורית מומרים לאותיות רישיות;
  6. boolean equals(s)- מחזירה true אם המחרוזת שעליה מוחלת השיטה תואמת למחרוזת s שצוינה בארגומנט המתודה (לא ניתן להשוות באמצעות אופרטור ==המחרוזת, כמו כל אובייקט אחר);
  7. int indexOf(ch)- מחזירה את האינדקס של התו ch במחרוזת (האינדקס הוא המספר הסידורי של התו, אך התווים ממוספרים החל מאפס). אם התו לא נמצא בכלל, הוא יחזיר -1. אם תו מופיע יותר מפעם אחת במחרוזת, הוא יחזיר את האינדקס של המופע הראשון שלו.
  8. int lastIndexOf(ch)- דומה לשיטה הקודמת, אך מחזיר את האינדקס של ההתרחשות האחרונה אם הסמל מופיע מספר פעמים בשורה.
  9. int indexOf(ch,n)- מחזיר את האינדקס של התו ch במחרוזת, אבל מתחיל לבדוק מאינדקס n (האינדקס הוא המספר הסידורי של התו, אבל התווים ממוספרים החל מאפס).
  10. char charAt(n)- מחזירה את הקוד של התו הממוקם בשורה מתחת לאינדקס n (האינדקס הוא המספר הסידורי של התו, אך התווים ממוספרים החל מאפס).
public class Main {
    public static void main(String[] args) {
        String s1 = "firefox";
        System.out.println(s1.toUpperCase()); // выведет «FIREFOX»
        String s2 = s1.replace('o', 'a');
        System.out.println(s2); // выведет «firefax»
        System.out.println(s2.charAt(1)); // выведет «i»
        int i;
        i = s1.length();
        System.out.println(i); // выведет 7
        i = s1.indexOf('f');
        System.out.println(i); // выведет 0
        i = s1.indexOf('r');
        System.out.println(i); // выведет 2
        i = s1.lastIndexOf('f');
        System.out.println(i); // выведет 4
        i = s1.indexOf('t');
        System.out.println(i); // выведет -1
        i = s1.indexOf('r',3);
        System.out.println(i); // выведет -1
    }
}
דוגמה לתוכנית שתציג את האינדקסים של כל הרווחים בשורה שהזין המשתמש מהמקלדת:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        for(int i=0; i < s.length(); i++) {
            if(s.charAt(i) == ' ') {
                System.out.println(i);
            }
        }
    }
}
קישור למקור: זרמי קלט/פלט ומיתרים ב-Java
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION