PDA

View Full Version : فرق کلاس Scanner با System.in در چیست؟



Sina.iRoid
شنبه 08 شهریور 1393, 14:55 عصر
سلام. ممنون میشم اگر راهنماییم کنید.

اول می خواستم بدونم برای اینکه بخوایم از کاربر یه ورودی و دریافت کنیم، باید از Scanner استفاده کنیم یا System.in.read();. فرق این دو تا در چیه!؟
و اینکه من یه کد به صورت زیر نوشتم:


import java.util.Scanner;


public class DriverClass {

public static void main(String[] args){

Scanner userInput = new Scanner(System.in);

char ch = userInput.next();
}
}


اما از این خط:
char ch = userInput.next();
ایراد میگیره. میشه بگین چرا نمیشه!؟
من می خوام یه برنامه ای و بنویسم که وقتی کاربر یک کارکتری و وارد م یکنه، کد اسکی اون کارکتر و توی خروجی چاپ کنه. اما نمی تونم ورودی و دریافت کنم. ممنون میشم اگر راهنماییم کنید.

ahmad.mo74
شنبه 08 شهریور 1393, 16:21 عصر
سلام، کلاس Scanner کلاس کاملی برای خوندن از stream ها و console هست و امکانات فراونی برای parse کردن و tokenize کردن انواع و اقسام data type ها (byte, char, int, float, double,...) داره و کار کردن باهاش فوق العاده راحتر از کلاس های دیگه مثل BufferedReader که فقط میتونید خروجی stream رو read کنید و کار خاص دیگه ای نمیشه باهاش کرد، البته read کردن با BufferedReader خیلی بهتر و به صرفه تره چون از buffer استفاده میکنه و یک فرق دیگش با Scanner اینه که BufferedReader سینک شده هست ولی Scanner نه...
اما شما میتونید BufferedReader رو به Scanner بدید و اینطوری از مزایای BufferedReader هم استفاده میشه:

Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in))); // or FileInputStream, Socket InputStream, ...

ولی در حالت عادی اینطوری استفاده میشه :

Scanner scanner = new Scanner(inStream);

و اما مشکل شما اینه که اگر دقت کنی ()next استرینگ برمیگردونه ولی شما ریختی تو char

اینم یه مثال:

public static void main(String[] args) {
try (Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in)))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}


برای اینکه از بقیه قابلیت های Scanner استفاده کنی کافیه ctrl+space بزنی...به همین راحتی...