我如何使用Yield库将所提供的C#代码(用于按长度分割字符串,相对于空间)改编为Java?
我遇到了,其中的解决方案是用C#给出的,它使用我如何使用Yield库将所提供的C#代码(用于按长度分割字符串,相对于空间)改编为Java?,java,c#,yield-return,Java,C#,Yield Return,我遇到了,其中的解决方案是用C#给出的,它使用收益率返回。但是,我正在寻找一个Java解决方案,因此不能使用yield-return。(虽然有一个新的版本,但我不知道如何使用它来修改C#代码。) Dmitry Bychenko的C代码如下: // Enumerate by nearest space // Split String value by closest to length spaces // e.g. for length = 3 // "abcd efghihjkl m n p
收益率返回
。但是,我正在寻找一个Java解决方案,因此不能使用yield-return
。(虽然有一个新的版本,但我不知道如何使用它来修改C#代码。)
Dmitry Bychenko的C代码如下:
// Enumerate by nearest space
// Split String value by closest to length spaces
// e.g. for length = 3
// "abcd efghihjkl m n p qrstsf" -> "abcd", "efghihjkl", "m n", "p", "qrstsf"
public static IEnumerable<String> EnumByNearestSpace(this String value, int length) {
if (String.IsNullOrEmpty(value))
yield break;
int bestDelta = int.MaxValue;
int bestSplit = -1;
int from = 0;
for (int i = 0; i < value.Length; ++i) {
var Ch = value[i];
if (Ch != ' ')
continue;
int size = (i - from);
int delta = (size - length > 0) ? size - length : length - size;
if ((bestSplit < 0) || (delta < bestDelta)) {
bestSplit = i;
bestDelta = delta;
}
else {
yield return value.Substring(from, bestSplit - from);
i = bestSplit;
from = i + 1;
bestSplit = -1;
bestDelta = int.MaxValue;
}
}
// String's tail
if (from < value.Length) {
if (bestSplit >= 0) {
if (bestDelta < value.Length - from)
yield return value.Substring(from, bestSplit - from);
from = bestSplit + 1;
}
if (from < value.Length)
yield return value.Substring(from);
}
}
...
var list = data.EnumByNearestSpace(150).ToList();
//按最近空间枚举
//按最接近长度的空格拆分字符串值
//例如,对于长度=3
//“abcd efghihjkl m n p qrstsf”->“abcd”,“efghihjkl”,“m n”,“p”,“qrstsf”
公共静态IEnumerable EnumByNearestSpace(此字符串值,整数长度){
if(String.IsNullOrEmpty(value))
屈服断裂;
int bestDelta=int.MaxValue;
int-bestSplit=-1;
int from=0;
对于(int i=0;i0)?大小-长度:长度-大小;
如果((最佳分割<0)| |(增量<最佳增量)){
bestSplit=i;
最佳增量=增量;
}
否则{
收益率返回值。子字符串(from,bestSplit-from);
i=最佳分割;
from=i+1;
最佳分割=-1;
bestDelta=int.MaxValue;
}
}
//弦尾
如果(从=0){
if(最佳增量<值.长度-起始)
收益率返回值。子字符串(from,bestSplit-from);
from=bestSplit+1;
}
如果(从
下面是我的Java代码,但它不正确。(它只拆分第一行,但得到的不是后续行,而是一条长行。)
公共静态列表splitStringByNearestSpace(字符串文本,整数长度){
列表部件=新的ArrayList();
if(null!=text&&!text.isEmpty()){
int bestDelta=Integer.MAX_值,bestSplit=-1,from=0;
for(int i=0;i0)?大小-长度:长度-大小;
if(最佳分割<0 | |增量<最佳增量){
bestSplit=i;
最佳增量=增量;
}否则{
parts.add(text.substring(from,bestSplit-from));
i=最佳分割;
from=i+1;
最佳分割=-1;
bestDelta=Integer.MAX_值;
}
}
//弦尾
如果(来自=0){
if(bestDelta
测试调用:
String lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Aliquam nec ultrices tellus. Vivamus accumsan justo in orci fermentum "
+ "maximus. Cras id condimentum felis, iaculis finibus sapien. Fusce tempor,"
+ " lectus id hendrerit interdum, mauris ex ultrices leo, et mattis nibh "
+ "purus sit amet leo. Etiam ac dolor lorem. Morbi odio ligula, ultrices "
+ "vitae risus id, pretium iaculis odio. Curabitur vel sapien tristique, "
+ "dictum sapien ut, dignissim felis. Aliquam iaculis fermentum mattis.";
List<String> chunks = splitStringByNearestSpace(lipsum, 78);
if (chunks.size() > 0) {
for (String s : chunks) {
System.out.println(s + " => " + s.length());
}
} else {
System.err.println("No chunks returned!");
}
String lipsum=“Lorem ipsum door sit amet,concetetur adipising elit。”
+“奥奇发酵液中的阿利奎(Aliquam nec ultrices tellus.Vivamus accumsan justo)”
+“猫咪调味品的最大值,人类的最大值,”
+“莱克托斯·亨德雷特·英特杜姆、莫里斯·尤特里斯·利奥和马蒂斯·尼布”
+“我们坐在埃米特·利奥的位子上。我们坐在多洛·洛雷姆的位子上
+“我的生命,我的生命,我的生命,我的生命,”
+“智慧的名言,高贵的猫咪。发酵的阿利夸姆。”;
列表块=splitStringByNearestSpace(lipsum,78);
if(chunks.size()>0){
for(字符串s:块){
System.out.println(s+“=>”+s.length());
}
}否则{
System.err.println(“没有返回块!”);
}
返回整个列表,而不是放弃it@Cid我不确定这是否行得通。我怀疑它将返回一个空列表或被拆分的第一行,而不是所有的块。如果您不确定,请尝试它?返回整个列表,而不是放弃it@Cid我不确定这是否行得通。我怀疑它会返回一个空列表或被拆分的第一行,而不是所有的块?
String lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Aliquam nec ultrices tellus. Vivamus accumsan justo in orci fermentum "
+ "maximus. Cras id condimentum felis, iaculis finibus sapien. Fusce tempor,"
+ " lectus id hendrerit interdum, mauris ex ultrices leo, et mattis nibh "
+ "purus sit amet leo. Etiam ac dolor lorem. Morbi odio ligula, ultrices "
+ "vitae risus id, pretium iaculis odio. Curabitur vel sapien tristique, "
+ "dictum sapien ut, dignissim felis. Aliquam iaculis fermentum mattis.";
List<String> chunks = splitStringByNearestSpace(lipsum, 78);
if (chunks.size() > 0) {
for (String s : chunks) {
System.out.println(s + " => " + s.length());
}
} else {
System.err.println("No chunks returned!");
}