2016-06-08 2 views
0

코딩 영역이 생소이 질문에 이전에 질문했을 수 있으면 사과드립니다. 나는 이런 식으로 노력하고있다. 이 같은 64 자 이상의 단락이나 줄이 있다고 가정합니다. I've been using the Lumia 822 for over a month now and I noticed that the moment I reach over 70 characters단락을 60 자의 여러 줄로 구성하는 방법

60 번째 문자에는 60 번째 문자로 알려 지므로 다음 줄로 밀어 넣어야합니다. 예상되는 출력입니다.

I've been using the Lumia 822 for over a month now and I noticed that the moment I reach over 70 characters

당신이 이것을 달성하는 방법을 좀 도와 주 시겠어요. String Tokenizer 및 substr()을 사용했지만 작동하지 않았습니다.

유용한 제안을 보내주십시오.

감사합니다.

+0

원래 문자열에서 64 번째 문자마다 '\ n'(줄 바꿈) 문자를 넣기 만하면됩니다. 그러나, 나는 당신이하고 싶은 것이 나쁜 생각이라고 말하고 싶습니다. 그러나 그것은 당신이 그것을하고 싶은 이유에 달려 있습니다. – dabadaba

+0

'I'는 45 자이므로 실제로 나누고 자하는 수는 벨로우즈 코드로 결정할 수 있습니다. 내가 지금 이상 한 달 동안 루미아 822을 사용하고 을하고 단어 단어가 아니라 첫 번째 줄에 오지해야 "주의"를 참조하면 나는 을 발견 - : –

답변

0

매우 간단한 해결책 :

public String appendNewLine(String text, int max) { 
    int count = 0; 
    StringBuilder output = new StringBuilder(); 
     for (int i = 0; i < text.length(); i++) { 
      char c = text.charAt(i); 

      if (count >= max && c == ' ') { 
       count = 0; 
       output.append("\n"); 
      } else { 
       output.append(c);  
      } 
      count++; 
     } 
    return output.toString(); 
} 
+0

안녕 케빈, 코드의 출력은 총 문자 수가 60을 초과했습니다. "주목 한"단어가 두 번째 줄에 오는 식입니다. 감사합니다. . –

0

각 라인을 보장이 코드 splitLen 엄격 이하이다. 이후 나오는 단어는 다음 줄로 이동합니다.

splitLen 인수를 사용하여 선 너비를 조정할 수 있습니다. 나는 두 가지 시나리오를 다루려고 노력했다. 누락 된 것이 있으면 친절하게 지적하십시오.

public String splitString(String s, int splitLen){ 

    StringBuilder sb = new StringBuilder(); 
    int splitStart = 0; 

    while(splitStart < s.length()){ 

     int splitEnd = splitStart + splitLen; 
     splitEnd = splitEnd > s.length() ? s.length() : splitEnd; // avoid overflow 

     int spaceIndex = s.substring(splitStart, splitEnd) 
        .lastIndexOf(" "); 

     // look for lasts space in line, except for last line 
     if(spaceIndex != -1 && splitEnd != s.length()){ 
      splitEnd = splitStart + spaceIndex; 
     } 
     // else (no space in line), split word in two lines.. 

     sb.append(s.substring(splitStart, splitEnd)) 
      .append(System.lineSeparator()); 

     // if ends with space, skip space in next line 
     splitStart = splitEnd + (spaceIndex != -1 ? 1 : 0); 
    } 

    return(sb.toString()); 
} 
+1

감사합니다. Redflar, 정말 고마워 !! !! –

+0

또한 코드가 완전히 테스트되지 않았습니다 .. 모든 엣지 케이스를 주시하십시오. –

관련 문제