긴 문자열에서 문자로 시작하는 모든 단어를 얻으려고합니다. 어떻게 할거야, 자바 야? 모든 편지 나 비효율적 인 내용을 반복하고 싶지 않습니다.자바 문자로 시작하는 모든 단어 찾기
편집 : 나는 또한 cs 클래스에 대한 내장 된 데이터 구조 (물론 배열 제외)를 사용할 수 없습니다. 그러나 나는 자신의 데이터 구조를 만들 수있다 (나는 sevral을 만들었다). 단지
map.get("a")
긴 문자열에서 문자로 시작하는 모든 단어를 얻으려고합니다. 어떻게 할거야, 자바 야? 모든 편지 나 비효율적 인 내용을 반복하고 싶지 않습니다.자바 문자로 시작하는 모든 단어 찾기
편집 : 나는 또한 cs 클래스에 대한 내장 된 데이터 구조 (물론 배열 제외)를 사용할 수 없습니다. 그러나 나는 자신의 데이터 구조를 만들 수있다 (나는 sevral을 만들었다). 단지
map.get("a")
Scanner scan = new Scanner(text); // text being the string you are looking in
char test = 'x'; //whatever letter you are looking for
while(scan.hasNext()){
String wordFound = scan.next();
if(wordFound.charAt(0)==test){
//do something with the wordFound
}
}
이렇게, "A"로 시작하는 모든 단어를 찾을
ant, bat, art, cat
Hashmap
a -> ant,art
b -> bat
c -> cat
-
HashMap<String,String> map = new HashMap<String,String>();
예 -
split() 메소드를 사용할 수 있습니다. 다음은 예입니다.
String string = "your string";
String[] parts = string.split(" C");
for(int i=0; i<parts.length; i++) {
String[] word = parts[i].split(" ");
if(i > 0) {
// ignore the rest words because don't starting with C
System.out.println("C" + word[0]);
}
else { // Check 1st excplicitly
for(int j=0; j<word.length; j++) {
if (word[j].startsWith("c") || word[j].startsWith("C"))
System.out.println(word[j]);
}
}
}
"C"는 사용자 문자입니다. 그냥 배열 주위에 루프. 부품 [0]의 경우 "C"로 시작하는지 확인해야합니다. i = 1에서 루핑을 시작하는 것은 저의 실수였습니다. 올바른 당신은 그것을 통해 반복 다음 문자열에서 배열 수집을 취득하고 시도 할 수 0
은 그 것처럼 보입니다. 덕분에 –
이것은 너무 미묘하거나 완전히 잘못되었습니다. (나는 후자를 의심한다.) 만일 이것이 전자라면, 확장하라. – NPE
기다려주십시오. –
에서입니다 :
String s = "my very long string to test";
for(String st : s.split(" ")){
if(st.startsWith("t")){
System.out.println(st);
}
}
당신은 문자열의 첫 글자를 얻고 API 방법으로 확인할 수있는 경우 그것이 편지인지 아닌지.
jkk isLetter
ds isLetter
32 not Letter
@reto all right .. 편집을하겠습니다. – guptakvgaurav
정규 표현식 방법 : 당신은 몇 가지를 명확히 할 필요가
public static void main(String[] args) {
String text = "my very long string to test";
Matcher m = Pattern.compile("(^|\\W)(\\w*)").matcher(text);
while (m.find()) {
System.out.println("Found: "+m.group(2));
}
}
다음
는String input = "jkk ds 32";
String[] array = input.split(" ");
for (String word : array) {
char[] arr = word.toCharArray();
char c = arr[0];
if (Character.isLetter(c)) {
System.out.println(word + "\t isLetter");
} else {
System.out.println(word + "\t not Letter");
}
}
일부 샘플 출력됩니다. "단어"란 무엇입니까? 당신은 편지로 시작하는 "단어"만을 찾고 싶기 때문에 단어가 다른 문자를 가질 수 있다고 가정합니다. 그러나 어떤 문자가 허용됩니까? 그런 단어의 시작을 정의하는 것은 무엇입니까? 공백, 비 문자, 비 문자/비 숫자, ...?
예 :
String TestInput = "test séntènce îwhere I'm want,to üfind 1words starting $with le11ers.";
String regex = "(?<=^|\\s)\\pL\\w*";
Pattern p = Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS);
Matcher matcher = p.matcher(TestInput);
while (matcher.find()) {
System.out.println(matcher.group());
}
때문에 수정의 0 개 이상의 "word" characters (유니 코드 문자와 숫자, 다음 (\pL
문자에 대한 Unicode property이다) 문자로 시작 (?<=^|\s)\pL\w*
이 시퀀스를 찾을 수 정규식, Pattern.UNICODE_CHARACTER_CLASS
).
lookbehind assertion(?<=^|\s)
은 시퀀스 앞에 문자열 또는 공백 문자가 시작되도록합니다.
test
séntènce ==> contains non ASCII letters
îwhere ==> starts with a non ASCII letter
I ==> 'm is missing, because `'` is not in `\w`
want
üfind ==> starts with a non ASCII letter
starting
le11ers ==> contains digits
누락 된 단어 :
,to ==> starting with a ","
1words ==> starting with a digit
$with ==> starting with a "$"
을 당신이 알고하지 않기 때문에이 (피할 수없는 문자열의 모든 문자를보고 어떤 위로의 경우 *는 선험적 * 공간이있는 곳). – NPE
솔루션/시도 (코드)를보고 나중에 효율성에 대해 걱정할 수 있습니다. 또한 "long"을 정의하십시오. – reto
난이 도움이 될 생각 : 1. 분할 http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java 2. 그런 다음 "문자" 확인 http://stackoverflow.com/questions/4450045/difference-between-matches-and-find-in-java-regex – Bjego