我试图编写一个允许用户输入短语的程序(例如:"I like cats"
)并在单独的行上打印每个单词。我已经编写了部分,以便在每个空间都允许换行,但我不想在单词之间留下空行,因为多余的空格即可。我无法使用任何regular expressions
,例如String.split()
,replaceAll()
或trim()
。
我尝试使用了一些不同的方法,但如果您不知道确切的数字,我就不知道如何删除空格。我尝试了一堆不同的methods
,但似乎没有任何效果。
我有没有办法将它实现到我已编写的代码中?
for (i=0; i<length-1;) {
j = text.indexOf(" ", i);
if (j==-1) {
j = text.length();
}
System.out.print("\n"+text.substring(i,j));
i = j+1;
}
或者如何为它编写新的表达式?任何建议都会非常感激。
答案 0 :(得分:2)
我已经写过这个部分,以便在每个空间都允许换行 我不希望因为过多而在单词之间留下空白 空格。
如果您无法使用trim()
或replaceAll()
,则可以使用java.util.Scanner
将每个单词作为标记阅读。默认情况下,Scanner
使用空格模式作为查找标记的分隔符。同样,您也可以使用StringTokenizer
在新行上打印每个单词。
String str = "I like cats";
Scanner scanner = new Scanner(str);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
<强>输出强>
I
like
cats
答案 1 :(得分:0)
这样的事情,它的O(N)时间复杂度: 只需使用字符串构建器在迭代字符串时创建字符串,添加&#34; \ n&#34;每当你找到一个空间
String word = "I like cats";
StringBuilder sb = new StringBuilder();
boolean newLine = true;
for(int i = 0; i < word.length(); i++) {
if (word.charAt(i) == ' ') {
if (newLine) {
sb.append("\n");
newLine = false;
}
} else {
newLine = true;
sb.append(word.charAt(i));
}
}
String result = sb.toString();
编辑:修复了评论中提到的问题(多个空格的新行)
答案 2 :(得分:0)
这是一个使用substring()和indexOf()
的简单解决方案public static void main(String[] args) {
List<String> split = split("I like cats");
split.forEach(System.out::println);
}
public static List<String> split(String s){
List<String> list = new ArrayList<>();
while(s.contains(" ")){
int pos = s.indexOf(' ');
list.add(s.substring(0, pos));
s = s.substring(pos + 1);
}
list.add(s);
return list;
}
修改强>
如果您只想打印文本而不拆分或制作列表,可以使用:
public static void main(String[] args) {
newLine("I like cats");
}
public static void newLine(String s){
while(s.contains(" ")){
int pos = s.indexOf(' ');
System.out.println(s.substring(0, pos));
s = s.substring(pos + 1);
}
System.out.println(s);
}
答案 3 :(得分:0)
我认为这可以解决您的问题。
public static List<String> getWords(String text) {
List<String> words = new ArrayList<>();
BreakIterator breakIterator = BreakIterator.getWordInstance();
breakIterator.setText(text);
int lastIndex = breakIterator.first();
while (BreakIterator.DONE != lastIndex) {
int firstIndex = lastIndex;
lastIndex = breakIterator.next();
if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(text.charAt(firstIndex))) {
words.add(text.substring(firstIndex, lastIndex));
}
}
return words;
}
public static void main(String[] args) {
String text = "I like cats";
List<String> words = getWords(text);
for (String word : words) {
System.out.println(word);
}
}
输出
I
like
cats
答案 4 :(得分:0)
抱歉,我没有提醒您不能使用replaceAll()
。
这是我的另一个解决方案:
String s = "I like cats";
Pattern p = Pattern.compile("([\\S])+");
Matcher m = p.matcher(s);
while (m.find( )) {
System.out.println(m.group());
}
旧解决方案:
String s = "I like cats";
System.out.println(s.replaceAll("( )+","\n"));
答案 5 :(得分:-1)
你几乎完成了所有工作。只需添加少量内容,您的代码就可以按照您的意愿运行:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [typeArray count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [grouped[[typeArray objectAtIndex:section]] count]
}