如何编写一个replaceAll函数java?

时间:2016-03-18 04:14:53

标签: java string replaceall

我试图编写一个允许用户输入短语的程序(例如:"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; 
  }

或者如何为它编写新的表达式?任何建议都会非常感激。

6 个答案:

答案 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]
}