我通过练习一些基本程序来学习java。我有一个名为samplemain.java的类文件,我在其中每行读取一个文本文件,并将其存储在名为filewords的变量中。
samplemain.java中的代码-
public static void readFileData() {
Scanner fileInput = null;
try {
fileInput = new Scanner(new File("data.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while(fileInput.hasNextLine()) {
String fileWords = fileInput.nextLine();
System.out.println(fileWords);
}
}
这将打印我的data.txt值,如下所示-
Swift
Dotnet
Java
Typescript
Python
我有另一个类文件sample1.java,我想在其中做以下事情。
计算字符串中单词(filewords)的字母总数,并将其存储在另一个名为total的变量中,在该变量中,我还希望检查文件是否不应有任何垃圾值。
使用filewords中单词的大写版本,它应该计算单词中a、b、…、z的数量。
我已经编写了如下代码-sample1.java
public class Sample {
public void countLetters() {
int count = 0;
for (int i = 0; i < SampleMain.wordlist.size(); i++) {
if (Character.isLetter(SampleMain.fileWords.get(i).charAt(i)- 25) >= 0 && Character.isLetter(SampleMain.fileWords.get(i) - 25) <= 25) // I'm doing it wrong
SampleMain.total = count++;
}
}
有人能在这里指导我吗?我在迭代时做错了什么?我如何纠正这一点以获得上述计数。
2条答案
按热度按时间uklbhaso1#
tl;博士
使用代码点整数,不要过时
char
类型。细节
字符已过时
这个
char
类型在java中已过时,甚至无法表示unicode中定义的一半字符。学习使用代码点整数代替。代码点流
你可以得到源源不断的信息
int
原始值IntStream
,表示字符串中每个字符的代码点。显然,您希望重点关注字母与数字、标点符号等。因此,根据unicode定义,通过测试字符是否为字母进行筛选。
我们可以通过使用方法引用来缩短代码。
把代码拼凑起来。
输入=swift🦂 | 信数:5
使用常规java语法
如果您还不熟悉lambda、streams和方法引用,我们可以通过转换
IntStream
将代码点整数转换为List
.呼吁
boxed()
皈依int
将原始值转换为Integer
对象在称为“装箱”的过程中。循环列表,检查每个元素。如果它通过了字母的测试,增加你的计数器。
edqdpe6u2#
我正在使用正则表达式解决您的问题,示例代码如下:
有关详细信息,请参阅此链接。