@SuppressWarnings("")
	@Nonnull
	public static Number parse(@Nonnull String input) {
		String text = input.trim().toUpperCase();
		Number value;
		if (text.indexOf('.') > 0) {
			value = parseDecimal(text);
		} else {
			if (text.endsWith("L") && text.startsWith("0X")) {
				String substring = text.substring(2, text.indexOf("L"));
				if (substring.isEmpty()) return 0L;
				value = Long.parseLong(substring, 16);
			} else if (text.endsWith("L"))
				value = Long.parseLong(text.substring(0, text.indexOf("L")));
			else if (text.startsWith("0X")) {
				String substring = text.substring(2);
				if (substring.isEmpty()) return 0;
				value = Integer.parseInt(substring, 16);
			} else if (text.endsWith("F"))
				value = Float.parseFloat(text.substring(0, text.indexOf("F")));
			else if (text.endsWith("D") || text.contains("."))
				value = Double.parseDouble(text.substring(0, text.indexOf("D")));
			else
				value = Integer.parseInt(text);
		}
		return value;
	}
@Test
	void testParse() {
		assertEquals(0, NumberUtil.parse("0"));
		assertEquals(0L, NumberUtil.parse("0L"));
		assertEquals(0D, NumberUtil.parse("0.0"));
		assertEquals(0D, NumberUtil.parse("0.0d"));
		assertEquals(0D, NumberUtil.parse("0.0D"));
		assertEquals(0F, NumberUtil.parse("0.0f"));
		assertEquals(0F, NumberUtil.parse("0.0F"));
		assertEquals(0D, NumberUtil.parse("0."));
		assertEquals(0F, NumberUtil.parse("0.F"));
		assertEquals(0, NumberUtil.parse("0x"));
		assertEquals(0L, NumberUtil.parse("0xL"));
		assertEquals(0, NumberUtil.parse("0x0"));
		assertEquals(0L, NumberUtil.parse("0x0L"));
	}