>source

다음 유형의 문자열이있는 파일이 있습니다.

1 2 a 3 4
5 b 6 c 7

모든 문자를 문자열의 끝으로 옮기고 싶으므로 출력은 다음과 같습니다.

1 2 3 4 a
5 6 7 b c

나는 이렇게 시도했다 :

line.replaceAll("\\D+", "") + line.replaceAll("\\d+", "")

그러나 출력은 다음과 같이 제공됩니다.

1234    a
567   b c

공백을 유지하고 임의의 줄 수에 대해 끝에 모든 문자가있는 출력을 얻고 싶습니다.

어떤 도움을 주시면 감사하겠습니다

미리 감사드립니다.

추신 : 저는 스파크 스칼라 코드를 작성 중이므로 스칼라 방식을 보여주세요.


  • 답변 # 1

    당신이 file.txt 다음 내용으로 :

    1 2 a 3 4
    5 b 6 c 7
    10 b c 11 12
    
    

    당신은 사용할 수 있습니다 map , split , toList , sortedmkString 원하는 결과를 얻으려면 :

    import java.io.File
    import java.io.PrintWriter
    import scala.io.Source
    object Main {
      def main(args: Array[String]): Unit = {
        val f = new File("file.txt")
        val temp = new File("file.tmp")
        val w = new PrintWriter(temp)
        Source
          .fromFile(f)
          .getLines
          .map { x =>
            x
              .split(" ")
              .toList
              .sorted
              .mkString(" ")
          }
          .foreach(x => w.println(x))
        w.close()
        temp.renameTo(f)
      }
    }
    
    

    file.txt 위에서 실행 한 후 :

    1 2 3 4 a
    5 6 7 b c
    10 11 12 b c
    
    

  • 답변 # 2

    현재 접근 방식의 주된 문제는 두 번째 교체도 공백을 제거해야한다는 것입니다. 그렇지 않으면 숫자 만 제거되고 문자와 공백은 모두 남겨집니다. 그런 다음 각 문자 사이에 원래 공백을 다시 도입하기위한 추가 단계가 필요합니다. Java-esque 접근 방식을 사용하고 싶다고 가정하면 다음을 시도해 볼 수 있습니다.

    String line = "5 b 6 c 7";
    String output = line.replaceAll("\\D+", "") +
                    line.replaceAll("[\\d\\s]+", "");
    output = output.replaceAll("(?=.)", " ");
    System.out.println(output);
    
    

    이것은 다음을 인쇄합니다.

    5 6 7 b c
    
    

  • 답변 # 3

    문자가 순서에 따라 정렬된다는 이점을 누릴 수 있습니다.ASCII표.

    def sortStringWithSpaces(str: String): String =
      str.split(' ').sorted.mkString(" ")
    
    

    다음과 같이 사용할 수 있습니다.

    sortStringWithSpaces("1 2 a 3 4")
    // res: String = "1 2 3 4 a"
    sortStringWithSpaces("5 b 6 c 7")
    // res: String = "5 6 7 b c"
    sortStringWithSpaces("10 b c 11 12")
    // res: String = "10 11 12 b c"
    
    
    <시간 />

    여기에서 실행중인 코드를 볼 수 있습니다.

관련 자료

  • 이전 PowerShell을 사용하여 배열 JSON 내부의 개체에서 키 값을 얻는 방법은 무엇입니까?
  • 다음 2 내부 조인이있는 SQL Server 2014 STUFF