Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何使用Yield库将所提供的C#代码(用于按长度分割字符串,相对于空间)改编为Java?_Java_C#_Yield Return - Fatal编程技术网

我如何使用Yield库将所提供的C#代码(用于按长度分割字符串,相对于空间)改编为Java?

我如何使用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

我遇到了,其中的解决方案是用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 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!");
}