JavaRush /Java 博客 /Random-ZH /Java 中的 I/O 流和字符串
articles
第 15 级

Java 中的 I/O 流和字符串

已在 Random-ZH 群组中发布
Java 包库中的类用于输入数据ScannerJava 中的 I/O 流和字符串 - 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)— 如果应用该方法的字符串与方法参数中指定的字符串 s 匹配,则返回 true(不能==像任何其他对象一样使用字符串运算符进行比较);
  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 中的 I/O 流和字符串
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION