diff --git a/src/main/java/com/thealgorithms/conversions/TemperatureConverter.java b/src/main/java/com/thealgorithms/conversions/TemperatureConverter.java
new file mode 100644
index 000000000000..70af50bdea96
--- /dev/null
+++ b/src/main/java/com/thealgorithms/conversions/TemperatureConverter.java
@@ -0,0 +1,140 @@
+package com.thealgorithms.conversions;
+
+/**
+ * Utility class for converting temperatures between Celsius, Fahrenheit, and Kelvin.
+ *
+ *
Formulas reference:
+ * ...
+ *
Note: Some of the formulas presented on the wikipedia page are not correct
+ *
+ *
Examples:
+ *
+ * - 0 °C = 32 °F = 273.15 K
+ * - -40 °C = -40 °F
+ *
+ */
+public final class TemperatureConverter {
+
+ private TemperatureConverter() {
+ }
+
+ /**
+ * Converts Celsius to Fahrenheit.
+ * Formula: °C × 9/5 + 32
+ */
+ public static Double celsiusToFahrenheit(Double celsius) {
+ if (celsius < -273.15) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-273.15°C).");
+ }
+ return (celsius * 1.8) + 32;
+ }
+
+ public static String celsiusToFahrenheit(String celsius) {
+ String[] temp = celsius.replace("°C", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < -273.15) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-273.15°C).");
+ }
+ return ((value * 1.8) + 32) + "°F";
+ }
+
+ /**
+ * Converts Celsius to Kelvin.
+ * Formula: °C + 273.15
+ */
+ public static Double celsiusToKelvin(Double celsius) {
+ if (celsius < -273.15) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-273.15°C).");
+ }
+ return celsius + 273.15;
+ }
+
+ public static String celsiusToKelvin(String celsius) {
+ String[] temp = celsius.replace("°C", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < -273.15) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-273.15°C).");
+ }
+ return (value + 273.15) + " K";
+ }
+
+ /**
+ * Converts: Fahrenheit to Celsius.
+ * Formula: (°F - 32) * 5/9
+ */
+ public static Double fahrenheitToCelsius(Double fahrenheit) {
+ if (fahrenheit < -459.67) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-459.67°F).");
+ }
+ return (fahrenheit - 32) * (5.0 / 9.0);
+ }
+
+ public static String fahrenheitToCelsius(String fahrenheit) {
+ String[] temp = fahrenheit.replace("°F", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < -459.67) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-459.67°F).");
+ }
+ return ((value - 32) * (5.0 / 9.0)) + "°C";
+ }
+
+ /**
+ * Converts: Fahrenheit to Kelvin.
+ * Formula: (°F - 32) * 5/9 + 273.15
+ */
+ public static Double fahrenheitToKelvin(Double fahrenheit) {
+ if (fahrenheit < -459.67) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-459.67°F).");
+ }
+ return (fahrenheit - 32) * (5.0 / 9.0) + 273.15;
+ }
+
+ public static String fahrenheitToKelvin(String fahrenheit) {
+ String[] temp = fahrenheit.replace("°F", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < -459.67) {
+ throw new IllegalArgumentException("Temperature below absolute zero (-459.67°F).");
+ }
+ return ((value - 32) * (5.0 / 9.0) + 273.15) + " K";
+ }
+
+ /**
+ * Converts: Kelvin to Celsius.
+ * Formula: K - 273.15
+ */
+ public static Double kelvinToCelsius(Double kelvin) {
+ if (kelvin < 0) {
+ throw new IllegalArgumentException("Temperature below absolute zero (0 K).");
+ }
+ return kelvin - 273.15;
+ }
+
+ public static String kelvinToCelsius(String kelvin) {
+ String[] temp = kelvin.replace("K", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < 0) {
+ throw new IllegalArgumentException("Temperature below absolute zero (0 K).");
+ }
+ return (value - 273.15) + "°C";
+ }
+
+ /**
+ * Converts: Kelvin to Fahrenheit.
+ * Formula: (K - 273.15) * 9/5 + 32
+ */
+ public static Double kelvinToFahrenheit(Double kelvin) {
+ if (kelvin < 0) {
+ throw new IllegalArgumentException("Temperature below absolute zero (0 K).");
+ }
+ return 1.8 * (kelvin - 273.15) + 32;
+ }
+
+ public static String kelvinToFahrenheit(String kelvin) {
+ String[] temp = kelvin.replace("K", "").trim().split(" ");
+ double value = Double.parseDouble(temp[0]);
+ if (value < 0) {
+ throw new IllegalArgumentException("Temperature below absolute zero (0 K).");
+ }
+ return (1.8 * (value - 273.15) + 32) + "°F";
+ }
+}
diff --git a/src/test/java/com/thealgorithms/conversions/TemperatureConverterTest.java b/src/test/java/com/thealgorithms/conversions/TemperatureConverterTest.java
new file mode 100644
index 000000000000..f90891b542c2
--- /dev/null
+++ b/src/test/java/com/thealgorithms/conversions/TemperatureConverterTest.java
@@ -0,0 +1,79 @@
+package com.thealgorithms.conversions;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.jupiter.api.Test;
+
+public class TemperatureConverterTest {
+
+ @Test
+ public void testValidCelsiusToFahrenheit() {
+ assertEquals(33.8, TemperatureConverter.celsiusToFahrenheit(1.0));
+ assertEquals(34.718, TemperatureConverter.celsiusToFahrenheit(1.51));
+ assertEquals(14.0, TemperatureConverter.celsiusToFahrenheit(-10.0));
+ assertEquals("33.8°F", TemperatureConverter.celsiusToFahrenheit("1°C"));
+ assertEquals("34.718°F", TemperatureConverter.celsiusToFahrenheit("1.51°C"));
+ assertEquals("14.0°F", TemperatureConverter.celsiusToFahrenheit("-10.0°C"));
+ }
+
+ @Test
+ public void testValidCelsiusToKevin() {
+ assertEquals(274.15, TemperatureConverter.celsiusToKelvin(1.0));
+ assertEquals(274.65999999999997, TemperatureConverter.celsiusToKelvin(1.51));
+ assertEquals(263.15, TemperatureConverter.celsiusToKelvin(-10.0));
+ assertEquals("274.15 K", TemperatureConverter.celsiusToKelvin("1°C"));
+ assertEquals("274.65999999999997 K", TemperatureConverter.celsiusToKelvin("1.51°C"));
+ assertEquals("263.15 K", TemperatureConverter.celsiusToKelvin("-10.0°C"));
+ }
+
+ @Test
+ public void testValidFahrenheitToCelsius() {
+ assertEquals(-17.22222222222222, TemperatureConverter.fahrenheitToCelsius(1.0));
+ assertEquals(65.55555555555556, TemperatureConverter.fahrenheitToCelsius(150.0));
+ assertEquals(-23.333333333333336, TemperatureConverter.fahrenheitToCelsius(-10.0));
+ assertEquals("-17.22222222222222°C", TemperatureConverter.fahrenheitToCelsius("1°F"));
+ assertEquals("65.55555555555556°C", TemperatureConverter.fahrenheitToCelsius("150.0°F"));
+ assertEquals("-23.333333333333336°C", TemperatureConverter.fahrenheitToCelsius("-10.0°F"));
+ }
+
+ @Test
+ public void testValidFahrenheitToKelvin() {
+ assertEquals(255.92777777777775, TemperatureConverter.fahrenheitToKelvin(1.0));
+ assertEquals(328.7055555555555, TemperatureConverter.fahrenheitToKelvin(132.0));
+ assertEquals(249.81666666666663, TemperatureConverter.fahrenheitToKelvin(-10.0));
+ assertEquals("255.92777777777775 K", TemperatureConverter.fahrenheitToKelvin("1°F"));
+ assertEquals("328.7055555555555 K", TemperatureConverter.fahrenheitToKelvin("132°F"));
+ assertEquals("249.81666666666663 K", TemperatureConverter.fahrenheitToKelvin("-10.0°F"));
+ }
+
+ @Test
+ public void testValidKelvinToCelsius() {
+ assertEquals(-272.15, TemperatureConverter.kelvinToCelsius(1.0));
+ assertEquals(-141.14999999999998, TemperatureConverter.kelvinToCelsius(132.0));
+ assertEquals(-263.15, TemperatureConverter.kelvinToCelsius(10.0));
+ assertEquals("-272.15°C", TemperatureConverter.kelvinToCelsius("1.0 K"));
+ assertEquals("-141.14999999999998°C", TemperatureConverter.kelvinToCelsius("132.0 K"));
+ assertEquals("-263.15°C", TemperatureConverter.kelvinToCelsius("10.0 K"));
+ }
+
+ @Test
+ public void testValidKelvinToFahrenheit() {
+ assertEquals(-457.86999999999995, TemperatureConverter.kelvinToFahrenheit(1.0));
+ assertEquals(-222.06999999999996, TemperatureConverter.kelvinToFahrenheit(132.0));
+ assertEquals(-441.66999999999996, TemperatureConverter.kelvinToFahrenheit(10.0));
+ assertEquals("-457.86999999999995°F", TemperatureConverter.kelvinToFahrenheit("1.0 K"));
+ assertEquals("-222.06999999999996°F", TemperatureConverter.kelvinToFahrenheit("132.0 K"));
+ assertEquals("-441.66999999999996°F", TemperatureConverter.kelvinToFahrenheit("10.0 K"));
+ }
+
+ @Test
+ public void testAbsoluteZeroAndBelow() {
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.celsiusToFahrenheit(-300.0));
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.celsiusToKelvin("-300°C"));
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.fahrenheitToCelsius(-500.0));
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.fahrenheitToKelvin("-500°F"));
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.kelvinToCelsius(-1.0));
+ assertThrows(IllegalArgumentException.class, () -> TemperatureConverter.kelvinToFahrenheit("-1 K"));
+ }
+}