Scanner 中的next()与nextLine()方法的区别

今天做在控制台输入一些字符统计其中数字,字母,空格,其他字符时使用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()方法只有读到回车时才会结束

 

 网上扒的,可以瞅瞅:

修饰符和类型方法和描述
voidclose()
关闭此扫描仪。
Patterndelimiter()
返回此当前使用的匹配分界符。 Pattern Scanner
StringfindInLine(Pattern pattern)
尝试查找忽略划界器的指定模式的下一次发生。
StringfindInLine(String pattern)
尝试查找从指定字符串构建的模式的下一次发生,忽略分界线。
StringfindWithinHorizon(Pattern pattern, int horizon)
尝试查找指定模式的下一次发生。
StringfindWithinHorizon(String pattern, int horizon)
尝试查找从指定字符串构建的模式的下一次发生,忽略分界线。
booleanhasNext()
如果此扫描仪的输入中具有另一个令牌,则返回真实。
booleanhasNext(Pattern pattern)
如果下一个完整的令牌与指定模式匹配,则返回真实。
booleanhasNext(String pattern)
如果下一个令牌与从指定字符串构建的模式匹配,则返回真实。
booleanhasNextBigDecimal()
如果扫描仪输入中的下一个令牌可以解释为使用下一个 BigDecimal()方法,则返回真实。 BigDecimal
booleanhasNextBigInteger()
如果扫描仪输入中的下一个令牌可以使用下一个 BigInteger()方法解释为默认半径向,则返回真实。 BigInteger
booleanhasNextBigInteger(int radix)
如果扫描仪输入中的下一个令牌可以解释为使用下一个 BigInteger()方法在指定的半径上返回,则返回真实。 BigInteger
booleanhasNextBoolean()
如果扫描仪输入中的下一个令牌可以使用字符串"真实|false"创建的箱麻木不仁模式被解释为布尔值,则返回真实。
booleanhasNextByte()
如果扫描仪输入中的下一个令牌可以使用下一个 字节()方法解释为默认半径向中的字节值,则返回真实。
booleanhasNextByte(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个 字节()方法解释为指定半径的字节值,则返回真实。
booleanhasNextDouble()
如果扫描仪输入中的下一个令牌可以使用下一个 双值()方法解释为双重值,则返回真实。
booleanhasNextFloat()
如果扫描仪输入中的下一个令牌可以使用下一个 Float()方法解释为浮动值,则返回真实。
booleanhasNextInt()
如果扫描仪输入中的下一个令牌可以使用下一个 Int()方法解释为默认半径向中的int值,则返回真实。
booleanhasNextInt(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个 Int()方法解释为指定半径的int值,则返回真实。
booleanhasNextLine()
如果此扫描仪的输入中有另一行,则返回真实。
booleanhasNextLong()
如果扫描仪输入中的下一个令牌可以解释为使用下一个 Long ()方法在默认半径流星中具有长值,则返回真实。
booleanhasNextLong(int radix)
如果扫描仪输入中的下一个令牌可以使用下一个 Long()方法解释为指定半径的长值,则返回真实。
booleanhasNextShort()
如果扫描仪输入中的下一个令牌可以解释为使用下一个 Short()方法在默认半径向中的短值,则返回真实。
booleanhasNextShort(int radix)
如果扫描仪输入中的下一个令牌可以解释为使用下一个 Short()方法在指定半径值中的短值,则返回真实。
IOExceptionioException()
返回最后抛出这个基础。 IOException Scanner Readable
Localelocale()
返回此扫描仪的本地定位。
MatchResultmatch()
返回此扫描仪执行的最后扫描操作的匹配结果。
Stringnext()
从此扫描仪中查找并返回下一个完整的令牌。
Stringnext(Pattern pattern)
如果下一个令牌与指定模式匹配,则返回下一个令牌。
Stringnext(String pattern)
如果下一个令牌与从指定字符串构建的模式相匹配,则返回下一个令牌。
BigDecimalnextBigDecimal()
将输入的下一个令牌扫描为 "大恶魔"。
BigIntegernextBigInteger()
将输入的下一个令牌扫描为 "大整数"。
BigIntegernextBigInteger(int radix)
将输入的下一个令牌扫描为 "大整数"。
booleannextBoolean()
将输入的下一个令牌扫描为布尔值并返回该值。
bytenextByte()
将输入的下一个令牌扫描为小节。
bytenextByte(int radix)
将输入的下一个令牌扫描为小节。
doublenextDouble()
将输入的下一个令牌扫描为双。
floatnextFloat()
将输入的下一个令牌扫描为浮子。
intnextInt()
将输入的下一个令牌扫描为int。
intnextInt(int radix)
将输入的下一个令牌扫描为int。
StringnextLine()
将此扫描仪预支到当前行,并返回跳过的输入。
longnextLong()
将输入的下一个令牌扫描为长。
longnextLong(int radix)
将输入的下一个令牌扫描为长。
shortnextShort()
将输入的下一个令牌扫描为短。
shortnextShort(int radix)
将输入的下一个令牌扫描为短。
intradix()
返回此扫描仪的默认半径。
voidremove()
删除操作不支持此实施。 Iterator
Scannerreset()
重置此扫描仪。
Scannerskip(Pattern pattern)
跳过与指定模式匹配的输入,忽略分界符。
Scannerskip(String pattern)
跳过与从指定字符串构建的模式相匹配的输入。
StringtoString()
返回此字符串表示。 Scanner
ScanneruseDelimiter(Pattern pattern)
将此扫描仪的划界模式设置为指定模式。
ScanneruseDelimiter(String pattern)
将此扫描仪的划界模式设置为从指定的模式构建的模式。 String
ScanneruseLocale(Locale locale)
将此扫描仪的本地设置为指定的局域。
ScanneruseRadix(int radix)
将此扫描仪的默认半径向设置为指定的半径。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值