今天遇到一个面试题,描述如下:
计算字符串最后一个单词的长度,单词以空格隔开。
其实很简单:
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println(getLastWordLen(scan.next())); } public static int getLastWordLen(String str){ int i = str.lastIndexOf(" ")+1; String lastWord = str.substring(i); return lastWord.length(); } }
but.....,测试一下发现并不对。随便输入一个“123 12”,结果应该是2,实际却输出3,百思不得姐,一度查看lastIndexOf源码,依然不明白咋回事。最后发现问题出在scan.next(),这个方法不支持控制台输入带有空格的字符串,例如输入“123 12”,实际上只能接收到“123”,空格后面的被截掉了,改成scan.nextLine(),问题解决。
控制台输入再入新坑
System.out.println(scan.next()) ;
System.out.println(scan.nextLine()) ;
这样写,我觉得人畜无伤,实际上第一次输入完成后,还没等我再次输入,就结束了。
盗用人家的成果https://blog.csdn.net/superme_yong/article/details/80543995。nextLine()换成nextInt()也不行,所以还是尽量用同一种next方法吧。