in commons-numbers-quaternion/src/main/java/org/apache/commons/numbers/quaternion/Quaternion.java [651:694]
public static Quaternion parse(String s) {
final int startBracket = s.indexOf(FORMAT_START);
if (startBracket != 0) {
throw new QuaternionParsingException("Expected start string: " + FORMAT_START);
}
final int len = s.length();
final int endBracket = s.indexOf(FORMAT_END);
if (endBracket != len - 1) {
throw new QuaternionParsingException("Expected end string: " + FORMAT_END);
}
final String[] elements = s.substring(1, s.length() - 1).split(FORMAT_SEP);
if (elements.length != NUMBER_OF_PARTS) {
throw new QuaternionParsingException("Incorrect number of parts: Expected 4 but was " +
elements.length +
" (separator is '" + FORMAT_SEP + "')");
}
final double a;
try {
a = Double.parseDouble(elements[0]);
} catch (NumberFormatException ex) {
throw new QuaternionParsingException("Could not parse scalar part" + elements[0], ex);
}
final double b;
try {
b = Double.parseDouble(elements[1]);
} catch (NumberFormatException ex) {
throw new QuaternionParsingException("Could not parse i part" + elements[1], ex);
}
final double c;
try {
c = Double.parseDouble(elements[2]);
} catch (NumberFormatException ex) {
throw new QuaternionParsingException("Could not parse j part" + elements[2], ex);
}
final double d;
try {
d = Double.parseDouble(elements[3]);
} catch (NumberFormatException ex) {
throw new QuaternionParsingException("Could not parse k part" + elements[3], ex);
}
return of(a, b, c, d);
}