gpt4 book ai didi

java - 如何只打印字符串的某些部分?

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:36 25 4
gpt4 key购买 nike

首先 - 请原谅我,因为我是业余爱好者。

对于一个项目,我将一个 excel 文件作为包含小猫列表的输入,并且我想输出找到这些小猫的地址。

我已经实现了代码,使小猫成为一个具有名称、ID 和注释的对象(通过评估 Excel 文档中的每个单元格为小猫分配了这些属性)。注释部分包含有关小猫被发现地点的信息。

Excel document: 

name | ID | Notes
--------------------
Kit | 5 | Great animal! Haha! Found at 1234 east
| | street. Incredibly ugly.
---------------------
Kat | 2 | Wow, what a charmer. from location 3456
| | Dusk road
.
.
.

目前,我的程序将 Excel 文档转换为字符串,并打印每只小猫的整个“注释”部分。我希望它从字符串的其余部分中提取地址(尝试获取尽可能多的地址),因此输出将如下所示:

    1234 east street, 3456 Dusk Road, ... 

我在网上能找到的都是关于字符串分隔符等,但我不知道如何开始考虑从长长的变化字符串中提取特定的短语。有没有办法记录某些关键字的信息,例如“发现于”或“来自位置”,然后停在某个句点?

不将每个地址转换为一个长字符串,而是打印出每只小猫提取的地址会更容易吗?

我的代码(供引用):

 public class Kitten {
private String name;
private String animalID;
private String addressFound;


public Kitten() {
super();
this.name = name;
this.animalID = animalID;
this.addressFound = addressFound;
}

//getters and setters

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}


public String getAnimalID() {
return animalID;
}

public void setAnimalID(String animalID) {
this.animalID = animalID;
}

public String getAddress() {
return addressFound;
}

public void setAddress(String addressFound) {
this.addressFound = addressFound;

}
}

输入:包含小猫信息的 Excel 文件。打印“注释”部分每只小猫

 public class ReadExcel {

public void printer() {
try {

FileInputStream kittenFile = new FileInputStream(new
File("./IntakeNotesSimple.xlsx"));

XSSFWorkbook wb = new XSSFWorkbook(kittenFile);
XSSFSheet sheet = wb.getSheetAt(0);

ArrayList<Kitten> kittenList = new ArrayList<>();
for (int i= sheet.getFirstRowNum() + 1; i<= sheet.getLastRowNum();
i++) {
Kitten k = new Kitten();
Row r = sheet.getRow(i);

for (int j = r.getFirstCellNum(); j<= r.getLastCellNum(); j++)
{
Cell c = r.getCell(j);

if (j==0) {
k.setName(c.getStringCellValue());
}


if (j==1) {
k.setAnimalID(c.getStringCellValue());
}
if (j==2 && (c != null)) {
k.setAddress(c.getStringCellValue());
}

}
kittenList.add(k);

}

for (Kitten kit: kittenList) {
System.out.println(kit.getAddress() +"\n" +);
}

wb.close();

}
catch(Exception e) {
e.printStackTrace();
}
}
}



public class PrintOut {
public static void main(String[] args) throws FileNotFoundException {
ReadExcel addresses = new ReadExcel();
addresses.printer();
}
}

最佳答案

假设您有一个单词列表,可以为您提供地址的开头(实际上不会有那么多可能性,但让我们想象一下,正如您建议的那样,这可以在您的OP中使用)。

您搜索的字符串将以一些字符开头,然后是“找到于”或“来自位置”,并且将以下一个 . !? 字符结束。最后一部分将包含一些其他字符。

您应该在这里使用的解决方案是 Regex,也称为您可以找到的最佳模式匹配工具。上述模式的正则表达式为:

^.*?(在|位置找到)(.*?)([\.,!?].*+|)$

这个正则表达式并不那么容易,所以我们可能不会详细介绍,我最好将您链接到这个正则表达式的一些可视化工具:https://regex101.com/r/q1w428/1

现在,如何在 java 应用程序中使用它?

  private static final String KITTEN_PATTERN_STRING = "^.*?(found at|from location) (.*?)([\\.,!?].*+|)$";

private static final Pattern KITTEN_PATTERN = Pattern.compile(KITTEN_PATTERN_STRING);

public String extractKittenAddress(String kittenString) {
Matcher m = KITTEN_PATTERN.matcher(kittenString);

if(m.matches())
return m.group(2);
return null;

}

就这样吧!

关于java - 如何只打印字符串的某些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com