Java中读取控制台的用户输入

来源:互联网 发布:淘宝上比较好的礼服店 编辑:程序博客网 时间:2024/04/30 00:32
 

  1、简单的获取用户输入
  下面是一个基本的例子,包含解释:
  importjava.io.BufferedReader;
  importjava.io.InputStreamReader;
  importjava.io.IOException;
  publicclassBasicInput{
  publicstaticvoidmain(String[]args){
  try{
  //在Java当中,用户输入要通过InputStream(输入流)来获取。
  //System.in就是系统的输入流。缺省情况下这个输入流连接到控制台(命令行)。
  //InputStreamReader就是用来读取InputStream的类。
  InputStreamReaderis_reader=newInputStreamReader(System.in);
  //通常使用BufferedReader来读取InputStream中的字符串内容。
  //BufferedReader可以一次读取一行。
  Stringstr=newBufferedReader(is_reader).readLine();
  //将读取的字符串输出到屏幕上。
  System.out.println("您输入的是:"+str);
  }catch(IOExceptione){
  e.printStackTrace();
  }
  }
  }
  看起来不少,实际上只有三行。下面将前面两行提取出来,放到单独的方法中,就成了下面这个样子(前面的 import 我就省掉了):
  publicclassBasicInput{
  publicstaticvoidmain(String[]args){
  try{
  Stringstr=readUserInput();
  System.out.println("您输入的是:"+str);
  }catch(IOExceptione){
  e.printStackTrace();
  }
  }
  /**
  *读取用户输入
  *
  *@return用户输入
  *@throwsIOException如果读取失败
  */
  privatestaticStringreadUserInput()throwsIOException{
  InputStreamReaderis_reader=newInputStreamReader(System.in);
  returnnewBufferedReader(is_reader).readLine();
  }
  }
  2、在读取之前显示提示文本
  有时候需要在读取前显示一段文字。下面是继续改造后的例子:
  publicclassBasicInput{
  publicstaticvoidmain(String[]args){
  try{
  //先提示一段文字,然后等待用户输入
  Stringstr=readUserInput("请输入您的年龄:");
  System.out.println("您输入的是:"+str);
  }catch(IOExceptione){
  e.printStackTrace();
  }
  }
  /**
  *读取用户输入
  *
  *@paramprompt提示文字
  *@return用户输入
  *@throwsIOException如果读取失败
  */
  privatestaticStringreadUserInput(Stringprompt)throwsIOException{
  //输出提示文字
  System.out.print(prompt);
  InputStreamReaderis_reader=newInputStreamReader(System.in);
  returnnewBufferedReader(is_reader).readLine();
  }
  }
  3、不允许用户输入为空
  这就要用到 while 循环,当用户输入为空(没有输入就直接回车)的时候重新要求输入。下面是将 readUserInput 方法改造后的例子:
  /**
  *读取用户输入
  *
  *@paramprompt提示文字
  *@return用户输入
  *@throwsIOException如果读取失败
  */
  privatestaticStringreadUserInput(Stringprompt)throwsIOException{
  //先定义接受用户输入的变量
  Stringresult;
  do{
  //输出提示文字
  System.out.print(prompt);
  InputStreamReaderis_reader=newInputStreamReader(System.in);
  result=newBufferedReader(is_reader).readLine();
  }while(result.equals(""));//当用户输入为空的时候,反复提示要求用户输入
  returnresult;
  }
  为了更加灵活的判断,我们将 while 中的判断语句提取成一个单独的方法。然后整个代码变成这样:
  publicclassBasicInput{
  publicstaticvoidmain(String[]args){
  try{
  //先提示一段文字,然后等待用户输入
  Stringstr=readUserInput("请输入您的年龄:");
  System.out.println("您输入的是:"+str);
  }catch(IOExceptione){
  e.printStackTrace();
  }
  }
  /**
  *读取用户输入
  *
  *@paramprompt提示文字
  *@return用户输入
  *@throwsIOException如果读取失败
  */
  privatestaticStringreadUserInput(Stringprompt)throwsIOException{
  //先定义接受用户输入的变量
  Stringresult;
  do{
  //输出提示文字
  System.out.print(prompt);
  InputStreamReaderis_reader=newInputStreamReader(System.in);
  result=newBufferedReader(is_reader).readLine();
  }while(isInvalid(result));//当用户输入无效的时候,反复提示要求用户输入
  returnresult;
  }
  /**
  *检查用户输入的内容是否无效
  *
  *@paramstr用户输入的内容
  *@return如果用户输入的内容无效,则返回true
  */
  privatestaticbooleanisInvalid(Stringstr){
  returnstr.equals("");
  }
  }
  4、只允许用户输入数字
  本例要求的是输入用户年龄。这是一个整数。为了避免得到非法的值,我们需要进一步对内容进行判断。因为之前我们将内容判断这一步单独提取出来,所以我们只要修改 isInvalid 方法就行了。判断一个字符串是不是数字,用正则表达式是最简单的。下面是修改后的 isInvalid 方法:
  privatestaticbooleanisInvalid(Stringstr){
  returnstr.equals("")||!str.matches("d+");
  }
  str.matches("d+") 用来判断字符串是不是全是数字。
  到这里纵观整个代码,可以看得出来,Java 虽然在某些地方复杂,但只要稍加整理,我们仍然可以得到逻辑结构合理的代码。

 

 

 

 

 

 

package com.AlexanderFaith.MyStringOrder;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class MyStringOrder {
          
 public static void main(String[] args) {
  //6
  Scanner input = new Scanner(System.in);
  String talk[] = new String[5];
  System.out.println("请输入5句话");
  for(int i=0; i<talk.length; i++) {
  System.out.println("第" + (i+1) + "句话:");
  talk[i] = input.next();
  }
  //Arrays.sort(talk);

  System.out.println("逆序输出5句话");
  for(int i=talk.length-1; i>=0; i--) {
  System.out.println(talk[i]);
  }

  
  //5Sentence
  try {
   System.out
   .println("Write down 5 sentences:");
   String strs[]=new String [5];
   String str;
   int i=0;
   do {
                
    System.out.print("The "+(i+1)+"Sentence:");
    InputStreamReader is_reader = new InputStreamReader(System.in);
    str = new BufferedReader(is_reader).readLine();
    strs[i]=str;
    ++i;
   } while (i<5);
   for(i=4;i>=0;i--){
    System.out.print("The "+(i+1)+"Sentence:");
   System.out.println(strs[i]);
   }
   
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  
  //1,With StringBuilder
  String str1="Java hurts my head";
  StringBuilder builder = new StringBuilder(str1);
  str1 = builder.reverse().toString();
  System.out.println(str1);
  
  //333
  Scanner in = new Scanner(System.in);
  StringBuffer s = new StringBuffer(in.next());

  s.reverse();
  System.out.println(s.toString());

  //2,With For
  try {
   String str;
   do {

    System.out
      .println("Write down something about your real life:");
    InputStreamReader is_reader = new InputStreamReader(System.in);
    str = new BufferedReader(is_reader).readLine();

   } while (str.equals(""));
   System.out.println("The Sentence you write is: " + str);
   System.out.println("And after reverse it: ");
   reverseSentence(str);
   System.out.println();
   reverseSecond(str);
  } catch (IOException e) {
   e.printStackTrace();
  }

 }

 private static void reverseSecond(String str) {
  // TODO Auto-generated method stub
  String[] s = str.split(" ");
  for (int i = s.length - 1; i >= 0; i--) {
   System.out.print(s[i] + " ");
  }
 }

 public static void reverseSentence(String sentence) {
  String[] s = sentence.split("");
  for (int i = s.length - 1; i >= 0; i--) {
   System.out.print(s[i] + "");
  }

 }
}

 

原创粉丝点击