mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
66 lines
2.1 KiB
Java
66 lines
2.1 KiB
Java
package com.thealgorithms.strings;
|
|
|
|
/**
|
|
* A utility class that provides a method to convert a string to a 32-bit signed integer (similar to C/C++'s atoi function).
|
|
*/
|
|
public final class MyAtoi {
|
|
private MyAtoi() {
|
|
}
|
|
|
|
/**
|
|
* Converts the given string to a 32-bit signed integer.
|
|
* The conversion discards any leading whitespace characters until the first non-whitespace character is found.
|
|
* Then, it takes an optional initial plus or minus sign followed by as many numerical digits as possible and interprets them as a numerical value.
|
|
* The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
|
|
*
|
|
* If the number is out of the range of a 32-bit signed integer:
|
|
* - Returns {@code Integer.MAX_VALUE} if the value exceeds {@code Integer.MAX_VALUE}.
|
|
* - Returns {@code Integer.MIN_VALUE} if the value is less than {@code Integer.MIN_VALUE}.
|
|
*
|
|
* If no valid conversion could be performed, a zero is returned.
|
|
*
|
|
* @param s the string to convert
|
|
* @return the converted integer, or 0 if the string cannot be converted to a valid integer
|
|
*/
|
|
public static int myAtoi(String s) {
|
|
if (s == null || s.isEmpty()) {
|
|
return 0;
|
|
}
|
|
|
|
s = s.trim();
|
|
int length = s.length();
|
|
if (length == 0) {
|
|
return 0;
|
|
}
|
|
|
|
int index = 0;
|
|
boolean negative = false;
|
|
|
|
// Check for the sign
|
|
if (s.charAt(index) == '-' || s.charAt(index) == '+') {
|
|
negative = s.charAt(index) == '-';
|
|
index++;
|
|
}
|
|
|
|
int number = 0;
|
|
while (index < length) {
|
|
char ch = s.charAt(index);
|
|
if (!Character.isDigit(ch)) {
|
|
break;
|
|
}
|
|
|
|
int digit = ch - '0';
|
|
|
|
// Check for overflow
|
|
if (number > (Integer.MAX_VALUE - digit) / 10) {
|
|
return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
|
|
}
|
|
|
|
number = number * 10 + digit;
|
|
index++;
|
|
}
|
|
|
|
return negative ? -number : number;
|
|
}
|
|
}
|