मैं इस आप क्या चाहते हैं करना होगा विश्वास करते हैं:
import java.util.*;
public class Test {
public static List<String> ngrams(int n, String str) {
List<String> ngrams = new ArrayList<String>();
String[] words = str.split(" ");
for (int i = 0; i < words.length - n + 1; i++)
ngrams.add(concat(words, i, i+n));
return ngrams;
}
public static String concat(String[] words, int start, int end) {
StringBuilder sb = new StringBuilder();
for (int i = start; i < end; i++)
sb.append((i > start ? " " : "") + words[i]);
return sb.toString();
}
public static void main(String[] args) {
for (int n = 1; n <= 3; n++) {
for (String ngram : ngrams(n, "This is my car."))
System.out.println(ngram);
System.out.println();
}
}
}
आउटपुट:
This
is
my
car.
This is
is my
my car.
This is my
is my car.
एक "मांग" समाधान एक इटरेटर के रूप में लागू:
class NgramIterator implements Iterator<String> {
String[] words;
int pos = 0, n;
public NgramIterator(int n, String str) {
this.n = n;
words = str.split(" ");
}
public boolean hasNext() {
return pos < words.length - n + 1;
}
public String next() {
StringBuilder sb = new StringBuilder();
for (int i = pos; i < pos + n; i++)
sb.append((i > pos ? " " : "") + words[i]);
pos++;
return sb.toString();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
'ngrams (" यह मेरी कार है ", -3)' (क्षमा करें, विरोध नहीं कर सके) – wds
'ngrams (" यह पार्स मेरी कार ", -3) 'ठीक काम करता है। 'ngrams (" यह मेरी कार है ", 6) हालांकि, 'नकारात्मक आरेख आकार अपवाद' में परिणाम। – aioobe
इन मामलों में आप क्या उम्मीद करते हैं? मैं विधि की शुरुआत में एक परीक्षण करने और एक खाली सरणी वापस करने का सुझाव देना चाहता हूं। आम तौर पर मुझे एक परिष्कृत त्रुटि प्रबंधन के साथ कुछ SO उत्तर दिखाई देते हैं। – Landei