在单词问题中间拆分字符串

时间:2015-07-13 13:08:20

标签: java regex scala

我通过从csv获取字段数据,从网站自动填写表格中的一些流程。

现在,对于地址,表格中有3个字段:

地址1 ____________

地址2 ____________

地址3 ____________

每个字段都有35个字符的限制,所以每当我得到35个字符时,我会继续第二个地址字段中的地址字符串......

现在,问题在于我现在的解决方案会拆分它,但是如果它达到35个字符就会切断它,如果str和'o'中的'barcelona'这个词是第35个字符,那么地址2将是'na'。

在这种情况下,我想确定第35个字符是否是单词的中间,并将整个单词带到下一个字段。

这是我目前的解决方案:

private def enterAddress(purchaseInfo: PurchaseInfo) = {

    val webElements = driver.findElements(By.className("address")).toList
    val strings = purchaseInfo.supplierAddress.grouped(35).toList
    strings.zip(webElements).foreach{
      case (text, webElement) => webElement.sendKeys(text)
    }
  }

我会在这里感谢一些帮助,最好是使用Scala,但java也会很好:)

感谢分配!

2 个答案:

答案 0 :(得分:2)

既然你说你也接受Java代码......下面的代码会将给定的输入字符串包装到给定最大长度的几行:

import java.util.ArrayList;
import java.util.List;

public class WordWrap {

  public static void main(String[] args) {
    String input = "This is a rather long address, somewhere in a small street in Barcelona";
    List<String> wrappedLines = wrap(input, 35);
    for (String line : wrappedLines) {
      System.out.println(line);
    }
  }

  private static List<String> wrap(String input, int maxLength) {
    String[] words = input.split(" ");
    List<String> lines = new ArrayList<String>();

    StringBuilder sb = new StringBuilder();
    for (String word : words) {
      if (sb.length() == 0) {
        // Note: Will not work if a *single* word already exceeds maxLength
        sb.append(word);
      } else if (sb.length() + word.length() < maxLength) {
        // Use < maxLength as we add +1 space.
        sb.append(" " + word);
      } else {
        // Line is full
        lines.add(sb.toString());
        // Restart
        sb = new StringBuilder(word);
      }
    }
    // Add the last line
    if (sb.length() > 0) {
      lines.add(sb.toString());
    }

    return lines;
  }
}

输出:

This is a rather long address,
somewhere in a small street in
Barcelona

这不一定是最好的方法,但我想你无论如何都必须适应Scala。

如果您更喜欢图书馆解决方案(因为...为什么要重新发明轮子?),您还可以查看WordUtils.wrap() from Apache Commons

答案 1 :(得分:0)

英语中的单词由空格(或其他标点符号)分隔,但在这种情况下这是无关紧要的,除非你真的想根据它来换行),并且有几个选项可以利用它来为你带来好处:

你可能做的一件事是从你的字符串中取一个35个字符的子字符串,使用String.lastIndexOf来确定空格的位置,并且只将该空格添加到你的地址行,然后重复从你输入字符串之前的空格字符。

另一种方法(在Marvin的回答中展示)是在空格上使用String.split并将它们连接在一起,直到下一个单词会导致字符串超过35个字符。