2016-12-05 3 views
0

Expanding an IP add에 온라인으로 보았던 코드를 컴파일하고 테스트하려고합니다. 그러나 그것을 컴파일하려고하면 StringBuilder 대체 메서드에 대한 오류가 발생합니다. 그것은 말합니다 :Java - StringBuilder replace()가 오류를 표시합니다. 메서드 String.replace (char, char)를 적용 할 수 없습니다.

IPadd.java:52: error: no suitable method found for replace(int,int,String) 
        address.replace(tempCompressLocation,tempCompressLocation+2,":"); 
         ^
method String.replace(char,char) is not applicable 
    (actual and formal argument lists differ in length) 

코드의 바꾸기 메소드가 (int, int, String) 올바른 데이터 유형을 표시하는지 확인했는지 확인했습니다. 이 프로그램을 어떻게 운영 할 수 있을지 궁금해.

import java.util.*; 

public class IPadd { 

    public static void main (String[] args){ 

     Scanner sc = new Scanner(System.in); 

     System.out.print("Input address: "); 
     String address = sc.nextLine(); 

     // Store the location where you need add zeroes that were removed during uncompression 

     int tempCompressLocation=address.indexOf("::"); 

     //if address was compressed and zeroes were removed, remove that marker i.e "::" 
     if(tempCompressLocation!=-1){ 
      address.replace(tempCompressLocation,tempCompressLocation+2,":"); 
     } 

     //extract rest of the components by splitting them using ":" 
     String[] addressComponents=address.toString().split(":"); 

     for(int i=0;i<addressComponents.length;i++){ 
      StringBuilder uncompressedComponent=new StringBuilder(""); 
      for(int j=0;j<4-addressComponents[i].length();j++){ 

       //add a padding of the ignored zeroes during compression if required 
       uncompressedComponent.append("0"); 

      } 
      uncompressedComponent.append(addressComponents[i]); 

      //replace the compressed component with the uncompressed one 
      addressComponents[i]=uncompressedComponent.toString(); 
     } 


     //Iterate over the uncompressed address components to add the ignored "0000" components depending on position of "::" 
     ArrayList<String> uncompressedAddressComponents=new ArrayList<String>(); 

     for(int i=0;i<addressComponents.length;i++){ 
      if(i==tempCompressLocation/4){ 
       for(int j=0;j<8-addressComponents.length;j++){ 
        uncompressedAddressComponents.add("0000"); 
       } 
      } 
      uncompressedAddressComponents.add(addressComponents[i]); 

     } 

     //iterate over the uncomopressed components to append and produce a full address 
     StringBuilder uncompressedAddress=new StringBuilder(""); 
     Iterator it=uncompressedAddressComponents.iterator(); 
     while (it.hasNext()) { 
      uncompressedAddress.append(it.next().toString()); 
      uncompressedAddress.append(":"); 
     } 
     uncompressedAddress.replace(uncompressedAddress.length()-1, uncompressedAddress.length(), ""); 
     return uncompressedAddress.toString(); 
     } 

} 
+0

어떤 코드의'replace()'메소드를 확인 했습니까? – EJP

답변

1

이 시도 예를 들어

,

address = address.replace("::", ":");//Replace all :: with : 
address = address.replaceFirst("::", ":");//Replace first occurrence of :: with : 
+0

해봤지만 다른 오류가 발생했습니다 : error : 호환되지 않는 유형 : 예기치 않은 반환 값 return uncompressedAddress.toString(); – Andrew

+0

당신이 뭔가 주요 방법을 반환하기 때문에. 이 System.out.println (uncompressedAddress.toString())을 사용하여 콘솔을 작성하십시오. return uncompressedAddress.toString() 대신에; –

1

은 당신이 시작 문자와 끝 문자 사이에 대체하려고 생각합니다. 이 경우 해당 문자의 인덱스를 가져와 replace 메소드에서 사용해야합니다. 그렇지 않으면 메소드에 적용 할 수 있도록 문자를 int로 변환해야합니다. 하지만 그건 당신이에 관심이있는 게 아니에요 같아요.

int index = stringbuilder.indexOf(String.valueOf(tempCompressLocation)); 
stringbuilder.replace(index, index + 2, ":"); 

당신은 단순히 특정 위치에 문자를 설정하는 Stringbuilder#setCharAt를 사용할 수 있습니다. 그러나 그것이 귀하의 요구 사항을 충족시킬 것인지 아닌지는 확실하지 않습니다.

이미 으로 언급했듯이 Jobin의 답변에 잘못된 String 메서드가 사용됩니다. StringBuilder 대신 String의 replace 메소드를 사용할 수 있습니다.

address.replace(tempCompressLocation, tempCompressLocation + 2, ":"); 

주소가 String 아닌 StringBuilder

+1

죄송 합니다만, 확실하지 않습니다 .. 만약 if 문을 제거한다고 가정한다면 (tempCompressLocation! = - 1) { address.replace (tempCompressLocation, tempCompressLocation + 2, ":")); 코드로 바꾸시겠습니까? – Andrew

1

당신이 StringStringBuilder 클래스에서 메소드를 대체 사용하려는 .. :

StringBuilder address = new StringBuilder(sc.nextLine()); 
1

String.replace 메서드는 두 개의 CharSequence 또는 두 개의 char 중 하나를 사용합니다. 문자열 자체를 다음과 같이 바꿀 수 있다고 생각합니다.

if (tempCompressLocation != -1) { 
    address.replace("::", ":"); 
} 

예를 들어 작동하는지 확인하십시오. 행운을 빕니다!

+0

다른 오류가 있습니다 : IPadd.java:94 : 오류 : 호환되지 않는 유형 : 예기치 않은 반환 값 return uncompressedAddress.toString(); – Andrew

+0

예! 나는 그것에 대해 잊어 버렸습니다 : 당신은'void' 메쏘드에서 돌아올 수 없습니다. 마지막 줄인'return uncompressedAddress.toString()'을 삭제하거나'uncompressedAddress' 값을보고 싶다면'System.out.print'에 대한'return'을 변경하십시오. –