Untitled

 avatar
unknown
plain_text
19 days ago
1.7 kB
1
Indexable
public class IPFormatter {

    public static String formatIp(String input) {
        if (input == null || !input.matches("\\d+") || input.length() < 7 || input.length() > 12) {
            throw new IllegalArgumentException("The input must be a numeric string between 7 and 12 digits.");
        }

        String remaining = input;
        StringBuilder formattedIp = new StringBuilder();
        int segmentsCount = 4;

        for (int i = 0; i < 3; i++) {
            int segmentLength = Math.max(1, remaining.length() - (segmentsCount - i - 1));
            int segment = Integer.parseInt(remaining.substring(0, segmentLength));

            while (segment > 255 && segmentLength > 1) {
                segmentLength--;
                segment = Integer.parseInt(remaining.substring(0, segmentLength));
            }

            formattedIp.append(segment).append(".");
            remaining = remaining.substring(segmentLength);
        }

        // Último segmento
        int lastSegment = Integer.parseInt(remaining);
        if (lastSegment > 255) {
            throw new IllegalArgumentException("Invalid IP address segments.");
        }
        formattedIp.append(lastSegment);

        return formattedIp.toString();
    }

    public static void main(String[] args) {
        // Testando os exemplos fornecidos
        String[] testIps = {"179176201147", "2007110564", "4516844142"};
        for (String ip : testIps) {
            try {
                System.out.println("Input: " + ip + " -> Output: " + formatIp(ip));
            } catch (IllegalArgumentException e) {
                System.out.println("Input: " + ip + " -> Error: " + e.getMessage());
            }
        }
    }
}
Leave a Comment