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