>

문장, 단어 및 문장 부호를 다루는 프로그램이 있습니다. 문장에서 여분의 공백을 제거합니다.

이것은 내 코드입니다 :

import java.util.*;
class Prog10
{
    static void main()
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter a sentence:");
        String out="";        
        for(String i:sc.nextLine().split("[\\s]"))
            out+=i+(<last-iteration-condition>?"":" ");  //Using regex to clean excess spaces
        System.out.print(out);
    }
}

부울 조건을 제외하고 코드를 새로 추가하지 않고 마지막 반복을 감지하고 싶습니다. 대답으로는 충분하지 않습니다.


  • 답변 # 1

    루프의 마지막 반복인지 직접 확인할 방법이 없습니다.

    반복하는 배열/반복 가능 길이를 알고 있다면, 반복 횟수를 세고 그것이 마지막임을 알고있을 때 무언가를 할 수 있지만, 이것은 강화 된 for 루프의 시점을 다소 상실합니다.

    루프의처음반복인지 판단하는 것은 매우 쉽습니다 :

    boolean isFirstIteration = true;
    for (String i : someIterable) {
      // Do stuff.
      isFirstIteration = false;
    }
    
    

    이 경우먼저공백을 추가하여 사용할 수 있습니다 :

    String delim = "";
    for(String i:sc.nextLine().split("[\\s]")) {
      out += delim + i;      
      delim = " ";
    }
    
    

    와이즈 비즈  variable은 처음에 빈 문자열이므로 첫 번째 반복에 아무것도 삽입하지 않습니다. 그러나 그런 다음 공백으로 설정되므로 이후의 모든 반복에 공백이 삽입되고 delim  문자열.

    와이즈 위즈  더 쉬울 것입니다.

  • 답변 # 2

    이것은 내가 생각 해낸 것입니다 :

    i
    
    

  • 답변 # 3

    바퀴를 다시 발명하는 대신 StringJoiner를 사용하여 문자열을 서로 연결해야합니다.

    String.join(" ", sc.nextLine().split(...))
    
    
    String out=""; for(String i:sc.nextLine().split("[\\s]")) out+=(out.isEmpty()?"":" ")+i; System.out.print(out);

  • 이전 luajit - 다음 루아 코드가 왜 유효합니까?
  • 다음 swift - 왜 2D UIImage 배열을 가질 수 없습니까?