java - 从字符串返回单个单词的方法
问题描述
正如我在标题中提到的,我想在 java 中创建一个方法,从字符串中找到每个单词并将其打印出来。
这就是它(更多更少)的样子:
public int findFirstLetter(int pos, String text)
{
while (pos<text.length())
{
if (Character.isLetter(text.charAt(pos))==true&&(pos == 0||Character.isLetter(text.charAt(pos-1))==false)){return pos;}
pos++;
}
return -1;
}
public int findLastLetter(int pos, String text)
{
while (pos<text.length()){
if (Character.isLetter(text.charAt(pos))==true&&(pos+2>text.length()||Character.isLetter(text.charAt(pos+1))==false)){return pos;}
pos++;
if (pos == -1){break;};
}
return -1;
}
public void testString (String text)
{
int first = findFirstLetter(0,text);
int last = findLastLetter(0,text);
String word = "";
int startWord = 0;
int i = 0;
while (first!=-1)
{
word = text.substring(first, last+1);
System.out.println("word: "+word);
startWord = text.indexOf(word)+1;
first = findFirstLetter(startWord,text);
if(first == -1){break;}
last = findLastLetter(first,text);
}
当我提供一些字符串作为此方法的输入时,循环开始从中间重复并且没有到达结尾。例如,在最后的短语中,该方法一遍又一遍地重复“循环是”。有人可以给我一些建议以找出问题所在吗?
解决方案
正如@Tim Biegeleisen 在其评论中所说,您可以使用 split 来获取单词,将它们放入一个数组并循环它以打印它们。请注意,提供了两个选项,您应该选择其中之一。如果您正在学习 Java,则第二个选项更具可读性和可理解性。
public void printWords(String s) {
String [] words = s.split("\\s+"); //Option 1: Tim Biegelsman regex
String [] words = s.split(" "); //Option 2: if the words are separated by blanks
for(String word : words) {
System.out.println(word);
}
}
另请注意,您可以通过这种方式保存一行代码:
public void printWords(String s) {
for(String word : s.split(" ")) {
System.out.println(word);
}
}
推荐阅读
- javascript - 在自定义钩子中使用钩子时触发的钩子错误使用无效?
- c - 如何将字符串与子字符串进行比较以将第一个和第二个之间的相等部分转换为'*'而不使用
- node.js - 仅在一台服务器上测试 discord bot discordjs
- eclipse - 为什么我不能将本地 GitHub 存储库添加到 Eclipse 中?
- mongodb - MongoDB Atlas 未出现在 Azure 数据工厂 2 的链接服务列表中
- codemirror - 使用 codemirror 在服务器上执行代码
- airflow - 气流连接密码解密
- javascript - React Js - 表格不对名称进行排序
- javascript - react-responsive-carousel:如何给拇指固定高度?
- groovy - groovy lang 缺少属性异常