![](/img/trans.png)
[英]how to convert Lower case letters to upper case letters & and upper case letters to lower case letters
[英]How do i convert a textfile to lower case and find the frequencies of the letters?
我正在编写一个读取文本文件并输出字母频率的代码。 我使用FileInputStream
方法来读取文件,但我不知道如何将大写转换为小写。
代码运行,但只读取小写字母。 我该如何纠正这个问题?
此解决方案不会将大写转换为小写,但可以帮助您解决问题。
由于 char 值来自 ASCII 表,您可以像这样进行第二个循环:
char ch = 'A';
for(int i=0; i<26; i++){
if(d==ch) {
f[i] += 1;
}
ch++;
}
或者你可以在你的 for 循环中修改你的条件:
if(d==ch || d==(ch-32))
您可以在此处查看 ascii 表: https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
如果您被允许使用 Java 8 个流和“新” IO 对象作为文件和路径,您可以非常简单地完成此任务:
Map<Character, Long> freq = Files.lines(Path.of(filepath)) // get stream of file lines
.flatMap(s -> s.chars().mapToObj(c -> (char) c)) // convert each line into stream of characters
.collect(
Collectors.groupingBy(Function.identity(), // group by each character
Collectors.counting())); // count characters in the stream
如果您只需要计算字母,您可以另外过滤它们:
Map<Character, Long> letterFreq = Files.lines(Path.of(filepath))
.flatMap(s -> s.chars().mapToObj(c -> (char) c))
.filter(Character::isLetter)
.collect(
Collectors.groupingBy(Function.identity(), Collectors.counting()));
您的程序运行良好。 要转换为小写,请参见以下内容:
while ((d = fileInputStream.read()) != -1) {
d = Character.toLowerCase(d); // <-- add this line here
char ch = 'a';
for (int i = 0; i < 26; i++) {
if (d == ch) {
f[i] = f[i] + 1;
}
ch++;
}
}
其他几个建议。
try
块的末尾放置一个 catch 块。} catch (IOException e) {
e.printStackTrace();
}
当您打印出字符时,请忽略那些计数为零的字符,以使您的频率计数更具可读性。
原始编号 arrays 被初始化为 0,所以你不需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.