为何下述Java代码提取字符而非空格?
拆解这段Java代码,解答你的困惑
首先先把这段代码贴出来方便分析:
public class Practice { public static void main( String[] args ) { String i = new String("I love you"); System.out.println(doSomething(i)); } public static String doSomething( String s ) { final String BLANK = " "; String str = ""; String temp; for ( int i = 0; i < s.length(); i++) { temp = s.substring(i, i + 1); if (!(temp.equals(BLANK))) { str += temp; } } return str; } }
先搞懂这段代码的核心功能
它其实是移除输入字符串里的所有空格,返回一个没有空格的新字符串。比如你传入"I love you",最终会输出"Iloveyou"。
逐行拆解关键逻辑
- 在
doSomething方法里,首先定义了一个常量BLANK代表空格字符。 - 初始化了一个空字符串
str,用来存放最终处理后的结果。 - 接下来的for循环会逐个遍历输入字符串
s的每一个字符:- 用
substring(i, i+1)取出当前位置的单个字符,存在temp里 - 重点看这个判断条件:
!(temp.equals(BLANK))——翻译成人话就是「如果当前字符不是空格」,那就把这个字符拼接到str里
- 用
- 循环结束后,
str里就攒了所有非空格的字符,返回它就行。
解答你的困惑:为什么提取的是字符而非空格?
原因就在那个if判断里!代码特意加了「非」的逻辑(!取反),只有当字符不是空格的时候,才会被添加到结果里。反过来想:如果当前字符是空格,就会跳过这个判断,不执行拼接操作。所以最终结果里自然就只有非空格的字符啦。
内容的提问来源于stack exchange,提问作者Z.Richard
相关产品推荐
相关产品推荐

