在Java中,将句子字符串拆分为每行的句子

在Java中,将句子字符串拆分为每行的句子,java,string,Java,String,我想用Java把句子分成每行一句 输入字符串: “随着投资者权衡美国总统选举、经济状况改善和利率上升的潜在影响,在基金财政年度的上半年,市政债券市场再次出现波动。2016年创纪录的市政债券发行水平进一步给市场带来压力。在此背景下ll六只基金出现下跌,从美国基金短期免税债券基金的-0.92%到美国高收入市政债券基金的-3.77%不等(基金具体结果和信息见第4页至第10页)。” 输出: 第1句:随着投资者权衡美国总统选举、经济状况改善和利率上升的潜在影响,市政债券市场在基金财年上半年重新出现波动 句

我想用Java把句子分成每行一句

输入字符串: “随着投资者权衡美国总统选举、经济状况改善和利率上升的潜在影响,在基金财政年度的上半年,市政债券市场再次出现波动。2016年创纪录的市政债券发行水平进一步给市场带来压力。在此背景下ll六只基金出现下跌,从美国基金短期免税债券基金的-0.92%到美国高收入市政债券基金的-3.77%不等(基金具体结果和信息见第4页至第10页)。”

输出:

第1句:随着投资者权衡美国总统选举、经济状况改善和利率上升的潜在影响,市政债券市场在基金财年上半年重新出现波动

句子2:2016年创纪录的市政债券发行水平进一步给市场带来压力。在此背景下,所有六只基金都出现了下跌,从美国基金短期免税债券基金的-0.92%到美国高收入市政债券基金的-3.77%不等

第3句:(参见第4页至第10页,了解基金的具体结果和信息

我已经编写了一个java代码,当(‘句号’)出现时,一个新的行已经在美国之后出现


string=string.replace(“.”,“\n”)

您可以将
string::split
与regex一起使用来完成以下操作:

String[] sentences = paragraph.split("(?<=[^ ]\\.) (?=[^a-z])");
int count = 0;
for(String str:sentences)
    System.out.println("Sentence " + (++count) + ":" + str);

String[]句=段落.split((?接受正则表达式。在正则表达式中,
表示除
\n
以外的任何内容。使用
\
转义点,因此结果参数变为
\.

在代码中尝试类似的方法:

List<String> eachLine = new ArrayList<String>();
String initialString = new String("Volatility returned to the municipal bond market during the first half of the funds’ fiscal year as investors weighed the potential impact of the U.S. presidential election, strengthening economic conditions and rising interest rates. The market was further pressured by a record level of municipal bond issuance in 2016. Against this backdrop, all six funds registered declines, ranging from –0.92% for American Funds Short-Term Tax-Exempt Bond Fund to –3.77% for American High-Income Municipal Bond Fund. (See pages 4 through 10 for fund specific results and information.)");

int stopIndex = initialString.indexOf( '. ' );//I am searching for the first occurance of '. ' in the string. 
//Note full stop followed blank space, which would denote either end of a sentence or words like U.K. or U.S. etc.

boolean UpperCase = checkForUpperCase(stopIndex+1);//write a function to check whether the alphabet/character following '. ' is in uppercase or not
//checking for Uppercase because a senetence starts with Uppercase
if(UpperCase){
   eachLine.add(initialString.substring(0,stopIndex));//add the sentence to List<String> to be processed later
   initialString = initialString.substring(stopIndex+1);//storing the rest of the sentence in the same string to be processed again
}
//keep parsing till you parse the whole string
List eachLine=new ArrayList();
字符串initialString=新字符串(“随着投资者权衡美国总统选举、经济状况改善和利率上升的潜在影响,市政债券市场在基金财政年度上半年重新出现波动。2016年创纪录的市政债券发行水平进一步给市场带来压力。在此背景下l六只基金出现下跌,从美国基金短期免税债券基金的-0.92%到美国高收入市政债券基金的-3.77%(基金具体结果和信息见第4页至第10页);
int stopIndex=initialString.indexOf(“.”);//我正在搜索字符串中第一个出现的“.”。
//注意完全停止跟随空白,这将表示句子或英国或美国等词的结尾。
boolean UpperCase=checkForUpperCase(stopIndex+1);//编写函数检查“.”后面的字母/字符是否为大写
//检查大写,因为senetence以大写开头
if(大写){
eachLine.add(initialString.substring(0,stopIndex));//将句子添加到列表中,以便稍后处理
initialString=initialString.substring(stopIndex+1);//将句子的其余部分存储在同一个字符串中,以便再次处理
}
//继续解析,直到解析整个字符串
您可以从这里了解有关如何检查大写字母的一般信息:

上面提到的代码只是一个片段,让您了解如何实现目标或解决问题

您也可以使用正则表达式来查找句号模式,但是以后理解基本方法可能更有用


太长了,读不下去了。< P>正则表达式在java中:

到目前为止你做了什么?你面临什么问题?这个问题太宽泛了?已经描述了一个问题并试图解决它。我猜有些人有TL;DR综合症。这不会解决他“美国”的问题。“匹配作为一个句子的结尾,虽然他们匹配的是一个点,后跟一个空格,这实际上会匹配句子,而不是
U.S.,
,但是第一个答案看起来要好得多,所以我推荐这个答案。”权衡美国总统选举的潜在影响“U.S.后面没有逗号。”啊哈,我没有看到这一点。感谢你指出这一点。不起作用。发生时分裂。在基金财政年度的上半年,随着投资者权衡美国总统选举、经济状况加强和利率上升的潜在影响,市政债券市场再次出现波动。市场进一步下跌2016年市政债券发行达到创纪录水平。在这种背景下,所有六只基金都出现了下跌,从美国基金短期免税债券基金的-0.92%到美国高收入市政债券基金的-3.77%。。对于测试用例,假设它行得通,但我将对其进行编辑,并在测试之前添加测试空间 period@SurjitPatra现在试试看