你真的了解空格吗

你是否被空格所欺骗

先说一下我遇到的问题,我在网页上复制了一段文字

backward 退步的,相反的bald 秃的balk 妨碍balmy 温和的
band 条,带,联合,结合bandit 强盗banish 驱逐出境bar 法院
barbarian 野蛮……

我需要送字符串中筛选出英文字符,并且实现英文字符之间存在一个空格,目标如下

// baboon backward bald balk balmy band bandit banish bar barbarian

搜首先复习了一下文件操作,读取到stringBuilder

FileReader fileReader = null;
StringBuilder stringBuilder = null;
// 读取字符串
try {
    fileReader = new FileReader("src\\com\\haojinhui\\test\\b.txt");
    int read;
    char[] chars = new char[1024];
    stringBuilder = new StringBuilder();
    while ((read = fileReader.read(chars)) != -1) {
        stringBuilder.append(chars, 0, read);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (fileReader != null) {
            fileReader.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

stringBuilder中的内容如下

System.out.println(stringBuilder.toString());
// backward 退步的,相反的bald 秃的balk 妨碍balmy 温和的band 条,带,联合,结合bandit 强盗banish

接着开始筛选英文,并保留到stringBuilder1

StringBuilder stringBuilder1 = new StringBuilder();
if (stringBuilder != null) {
    for (int i = 0; i < stringBuilder.length(); i++) {
        char c = stringBuilder.charAt(i);
        char c1 = 0;
        if (i + 1 < stringBuilder.length()) {
            c1 = stringBuilder.charAt(i + 1);
        }
        if (c >= 'a' && c <= 'z') {
            stringBuilder1.append(c);
            if (c1 == ' ') {
                stringBuilder1.append(' ');
            }
        }
    }
}

stringBuilder1中的内容如下

System.out.println(stringBuilder.toString());
// baboonbackwardbaldbalkbalmybandbanditbanishbarbarbarianbarebar

是不是出现问题了,英文单词直接应该是存在一个空格的,怎么不见了,让我们锁定这行代码

if (c1 == ' ') {
	stringBuilder1.append(' ');
}

通过debug,发现了一件神奇的事情
![![在这里插入图片描述](https://img-blog.csdnimg.cn/6a80988963f049f0ae6c7466d8e8818e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Ieq5YqoMjAwNOmDnemHkei-iQ==,size_20,color_FFFFFF,t_70,g_se,x_16](https://img-blog.csdnimg.cn/cbf4703b309b4cf6b5d97cc511053626.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Ieq5YqoMjAwNOmDnemHkei-iQ==,size_20,color_FFFFFF,t_70,g_se,x_16

baboon 狒狒 英文于仲文之间的空格c1)显然是8194,而不是我没平时见到的32,后来通过百度得到
在这里插入图片描述
此时真相大白,得出结论呢中文的空格与英文不同,更改代码,问题成功解决

if (c1 == 8194) {
	stringBuilder1.append(' ');
}

最后总结为一点

char c = ' ';  // 正常的空格
char c1 = ' ';  // 野生的空格
System.out.println((int) c);  // 32
System.out.println((int) c1);  // 8194
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值