今天做在控制台输入一些字符统计其中数字,字母,空格,其他字符时使用next()一直有问题,就是空格 ,数字,其他字符统计不出来,字母个数也不对
看代码:
import java.util.Scanner;
public class Test20 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//用于创建接收用户输入的变量input
System.out.println("请输入一串字符串:");// 先提示用户请输入
String str = input.next();// 接收用户输入
int letter, blank, digit, other;//letter 用来统计字母个数 blank 空格 digit 数字 other 其他字符
letter = blank = digit = other = 0;
// 将输入的类型转换为字符数组
char[] ch = str.toCharArray();
for (int j = 0; j < ch.length; j++) {
if (ch[j] >= 'a' && ch[j] <= 'z' || ch[j] >= 'A' && ch[j] <= 'z') {
letter++;
} else if (ch[j] == ' ') {
blank++;
} else if (ch[j] >= '0' && ch[j] <= '9') {
digit++;
} else {
other++;
}
}
//ch = null;
System.out.println("letter = " + letter + ", blank = " + blank + ", digit = " + digit + ", other = " + other);
}
}
用nexLine()之后
将.next()改为nextLine()之后
看结果:
可以看出用next()空格之后的统计不出来,
改成nextLine()之后 就都能统计出来
总结
我通过查阅文章发现:
next()方法当输入的字符串中有空格时会在空格那个地方结束;
而nextLine()方法只有读到回车时才会结束
网上扒的,可以瞅瞅:
修饰符和类型 | 方法和描述 |
---|---|
void | close()
关闭此扫描仪。
|
Pattern | delimiter()
返回此当前使用的匹配分界符。
Pattern
Scanner
|
String | findInLine(Pattern pattern)
尝试查找忽略划界器的指定模式的下一次发生。
|
String | findInLine(String pattern)
尝试查找从指定字符串构建的模式的下一次发生,忽略分界线。
|
String | findWithinHorizon(Pattern pattern, int horizon)
尝试查找指定模式的下一次发生。
|
String | findWithinHorizon(String pattern, int horizon)
尝试查找从指定字符串构建的模式的下一次发生,忽略分界线。
|
boolean | hasNext()
如果此扫描仪的输入中具有另一个令牌,则返回真实。
|
boolean | hasNext(Pattern pattern)
如果下一个完整的令牌与指定模式匹配,则返回真实。
|
boolean | hasNext(String pattern)
如果下一个令牌与从指定字符串构建的模式匹配,则返回真实。
|
boolean | hasNextBigDecimal()
如果扫描仪输入中的下一个令牌可以解释为使用下一个
BigDecimal() 方法,则返回真实。
BigDecimal
|
boolean | hasNextBigInteger()
如果扫描仪输入中的下一个令牌可以使用下一个
BigInteger() 方法解释为默认半径向,则返回真实。
BigInteger
|
boolean | hasNextBigInteger(int radix)
如果扫描仪输入中的下一个令牌可以解释为使用下一个
BigInteger() 方法在指定的半径上返回,则返回真实。
BigInteger
|
boolean | hasNextBoolean()
如果扫描仪输入中的下一个令牌可以使用字符串"真实|false"创建的箱麻木不仁模式被解释为布尔值,则返回真实。
|
boolean | hasNextByte()
如果扫描仪输入中的下一个令牌可以使用下一个
字节() 方法解释为默认半径向中的字节值,则返回真实。
|
boolean | hasNextByte(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个
字节() 方法解释为指定半径的字节值,则返回真实。
|
boolean | hasNextDouble()
如果扫描仪输入中的下一个令牌可以使用下一个
双值() 方法解释为双重值,则返回真实。
|
boolean | hasNextFloat()
如果扫描仪输入中的下一个令牌可以使用下一个
Float() 方法解释为浮动值,则返回真实。
|
boolean | hasNextInt()
如果扫描仪输入中的下一个令牌可以使用下一个
Int() 方法解释为默认半径向中的int值,则返回真实。
|
boolean | hasNextInt(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个
Int() 方法解释为指定半径的int值,则返回真实。
|
boolean | hasNextLine()
如果此扫描仪的输入中有另一行,则返回真实。
|
boolean | hasNextLong()
如果扫描仪输入中的下一个令牌可以解释为使用下一个
Long () 方法在默认半径流星中具有长值,则返回真实。
|
boolean | hasNextLong(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个
Long() 方法解释为指定半径的长值,则返回真实。
|
boolean | hasNextShort()
如果扫描仪输入中的下一个令牌可以解释为使用下一个
Short() 方法在默认半径向中的短值,则返回真实。
|
boolean | hasNextShort(int radix)
如果扫描仪输入中的下一个令牌可以解释为使用下一个
Short() 方法在指定半径值中的短值,则返回真实。
|
IOException | ioException()
返回最后抛出这个基础。
IOException
Scanner
Readable
|
Locale | locale()
返回此扫描仪的本地定位。
|
MatchResult | match()
返回此扫描仪执行的最后扫描操作的匹配结果。
|
String | next()
从此扫描仪中查找并返回下一个完整的令牌。
|
String | next(Pattern pattern)
如果下一个令牌与指定模式匹配,则返回下一个令牌。
|
String | next(String pattern)
如果下一个令牌与从指定字符串构建的模式相匹配,则返回下一个令牌。
|
BigDecimal | nextBigDecimal()
将输入的下一个令牌扫描为
"大恶魔 "。
|
BigInteger | nextBigInteger()
将输入的下一个令牌扫描为
"大整数"。
|
BigInteger | nextBigInteger(int radix)
将输入的下一个令牌扫描为
"大整数"。
|
boolean | nextBoolean()
将输入的下一个令牌扫描为布尔值并返回该值。
|
byte | nextByte()
将输入的下一个令牌扫描为小节。
|
byte | nextByte(int radix)
将输入的下一个令牌扫描为小节。
|
double | nextDouble()
将输入的下一个令牌扫描为双。
|
float | nextFloat()
将输入的下一个令牌扫描为浮子。
|
int | nextInt()
将输入的下一个令牌扫描为int。
|
int | nextInt(int radix)
将输入的下一个令牌扫描为int。
|
String | nextLine()
将此扫描仪预支到当前行,并返回跳过的输入。
|
long | nextLong()
将输入的下一个令牌扫描为长。
|
long | nextLong(int radix)
将输入的下一个令牌扫描为长。
|
short | nextShort()
将输入的下一个令牌扫描为短。
|
short | nextShort(int radix)
将输入的下一个令牌扫描为短。
|
int | radix()
返回此扫描仪的默认半径。
|
void | remove()
删除操作不支持此实施。
Iterator
|
Scanner | reset()
重置此扫描仪。
|
Scanner | skip(Pattern pattern)
跳过与指定模式匹配的输入,忽略分界符。
|
Scanner | skip(String pattern)
跳过与从指定字符串构建的模式相匹配的输入。
|
String | toString()
返回此字符串表示。
Scanner
|
Scanner | useDelimiter(Pattern pattern)
将此扫描仪的划界模式设置为指定模式。
|
Scanner | useDelimiter(String pattern)
将此扫描仪的划界模式设置为从指定的模式构建的模式。
String
|
Scanner | useLocale(Locale locale)
将此扫描仪的本地设置为指定的局域。
|
Scanner | useRadix(int radix)
将此扫描仪的默认半径向设置为指定的半径。
|