Package tech.units.indriya.format
Class SimpleUnitFormat
- java.lang.Object
-
- tech.units.indriya.format.AbstractUnitFormat
-
- tech.units.indriya.format.SimpleUnitFormat
-
- All Implemented Interfaces:
javax.measure.format.UnitFormat
- Direct Known Subclasses:
SimpleUnitFormat.DefaultFormat
public abstract class SimpleUnitFormat extends AbstractUnitFormat
This class implements the
UnitFormatinterface for formatting and parsingunits.For all SI units, the 20 SI prefixes used to form decimal multiples and sub-multiples are recognized. As well as the 8 binary prefixes.
Unitsare directly recognized. For example:
UnitFormat format = SimpleUnitFormat.getInstance();
format.parse("m°C").equals(MetricPrefix.MILLI(Units.CELSIUS));
format.parse("kW").equals(MetricPrefix.KILO(Units.WATT));
format.parse("ft").equals(Units.METRE.multiply(0.3048))- Since:
- 1.0
- Version:
- 2.1, April 21, 2020
- Author:
- Jean-Marie Dautelle, Werner Keil, Eric Russell
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classSimpleUnitFormat.ASCIIFormatThis class represents the ASCII format.protected static classSimpleUnitFormat.DefaultFormatThis class represents the standard format.static classSimpleUnitFormat.FlavorFlavor of this format
-
Constructor Summary
Constructors Modifier Constructor Description protectedSimpleUnitFormat()Base constructor.
-
Method Summary
Modifier and Type Method Description abstract voidalias(javax.measure.Unit<?> unit, String alias)Attaches a system-wide alias to this unit.StringBufferformat(Object unit, StringBuffer toAppendTo, FieldPosition pos)Formats an unit and appends the resulting text to a given string buffer (implementsjava.text.Format).abstract Appendableformat(javax.measure.Unit<?> unit, Appendable appendable)Formats the specified unit.static SimpleUnitFormatgetInstance()Returns the unit format for the default locale (format used byAbstractUnit.parse(CharSequence)andUnit.toString()).static SimpleUnitFormatgetInstance(SimpleUnitFormat.Flavor flavor)Returns theSimpleUnitFormatin the desiredSimpleUnitFormat.Flavorprotected static booleanisAllASCII(String input)to check if a string only contains US-ASCII charactersprotected abstract booleanisValidIdentifier(String name)Indicates if the specified name can be used as unit identifier.abstract voidlabel(javax.measure.Unit<?> unit, String label)Attaches a system-wide label to the specified unit.javax.measure.Unit<?>parseObject(String source, ParsePosition pos)Parses the text from a string to produce an object (implementsjava.text.Format).abstract javax.measure.Unit<? extends javax.measure.Quantity>parseProductUnit(CharSequence csq, ParsePosition pos)Parses a sequence of character to produce a unit or a rational product of unit.abstract javax.measure.Unit<? extends javax.measure.Quantity>parseSingleUnit(CharSequence csq, ParsePosition pos)Parses a sequence of character to produce a single unit.-
Methods inherited from class tech.units.indriya.format.AbstractUnitFormat
format, parse, parse
-
-
-
-
Constructor Detail
-
SimpleUnitFormat
protected SimpleUnitFormat()
Base constructor.
-
-
Method Detail
-
getInstance
public static SimpleUnitFormat getInstance()
Returns the unit format for the default locale (format used byAbstractUnit.parse(CharSequence)andUnit.toString()).- Returns:
- the default unit format (locale sensitive).
-
getInstance
public static SimpleUnitFormat getInstance(SimpleUnitFormat.Flavor flavor)
Returns theSimpleUnitFormatin the desiredSimpleUnitFormat.Flavor- Returns:
- the instance for the given
SimpleUnitFormat.Flavor.
-
format
public abstract Appendable format(javax.measure.Unit<?> unit, Appendable appendable) throws IOException
Formats the specified unit.- Specified by:
formatin interfacejavax.measure.format.UnitFormat- Specified by:
formatin classAbstractUnitFormat- Parameters:
unit- the unit to format.appendable- the appendable destination.- Returns:
- The appendable destination passed in as
appendable, with formatted text appended. - Throws:
IOException- if an error occurs.
-
parseProductUnit
public abstract javax.measure.Unit<? extends javax.measure.Quantity> parseProductUnit(CharSequence csq, ParsePosition pos) throws javax.measure.format.MeasurementParseException
Parses a sequence of character to produce a unit or a rational product of unit.- Parameters:
csq- theCharSequenceto parse.pos- an object holding the parsing index and error position.- Returns:
- an
Unitparsed from the character sequence. - Throws:
IllegalArgumentException- if the character sequence contains an illegal syntax.javax.measure.format.MeasurementParseException
-
parseSingleUnit
public abstract javax.measure.Unit<? extends javax.measure.Quantity> parseSingleUnit(CharSequence csq, ParsePosition pos) throws javax.measure.format.MeasurementParseException
Parses a sequence of character to produce a single unit.- Parameters:
csq- theCharSequenceto parse.pos- an object holding the parsing index and error position.- Returns:
- an
Unitparsed from the character sequence. - Throws:
IllegalArgumentException- if the character sequence does not contain a valid unit identifier.javax.measure.format.MeasurementParseException
-
label
public abstract void label(javax.measure.Unit<?> unit, String label)
Attaches a system-wide label to the specified unit. For example:SimpleUnitFormat.getInstance().label(DAY.multiply(365), "year"); SimpleUnitFormat.getInstance().label(METER.multiply(0.3048), "ft");If the specified label is already associated to an unit the previous association is discarded or ignored.- Specified by:
labelin interfacejavax.measure.format.UnitFormat- Overrides:
labelin classAbstractUnitFormat- Parameters:
unit- the unit being labeled.label- the new label for this unit.- Throws:
IllegalArgumentException- if the label is not aisValidIdentifier(String)valid identifier.
-
alias
public abstract void alias(javax.measure.Unit<?> unit, String alias)
Attaches a system-wide alias to this unit. Multiple aliases may be attached to the same unit. Aliases are used during parsing to recognize different variants of the same unit. For example:SimpleUnitFormat.getInstance().alias(METER.multiply(0.3048), "foot"); SimpleUnitFormat.getInstance().alias(METER.multiply(0.3048), "feet"); SimpleUnitFormat.getInstance().alias(METER, "meter"); SimpleUnitFormat.getInstance().alias(METER, "metre");If the specified label is already associated to an unit the previous association is discarded or ignored.- Parameters:
unit- the unit being aliased.alias- the alias attached to this unit.- Throws:
IllegalArgumentException- if the label is not aisValidIdentifier(String)valid identifier.
-
isValidIdentifier
protected abstract boolean isValidIdentifier(String name)
Indicates if the specified name can be used as unit identifier.- Parameters:
name- the identifier to be tested.- Returns:
trueif the name specified can be used as label or alias for this format;falseotherwise.
-
format
public final StringBuffer format(Object unit, StringBuffer toAppendTo, FieldPosition pos)
Formats an unit and appends the resulting text to a given string buffer (implementsjava.text.Format).- Parameters:
unit- the unit to format.toAppendTo- where the text is to be appendedpos- the field position (not used).- Returns:
toAppendTo
-
parseObject
public final javax.measure.Unit<?> parseObject(String source, ParsePosition pos) throws javax.measure.format.MeasurementParseException
Parses the text from a string to produce an object (implementsjava.text.Format).- Parameters:
source- the string source, part of which should be parsed.pos- the cursor position.- Returns:
- the corresponding unit or
nullif the string cannot be parsed. - Throws:
javax.measure.format.MeasurementParseException
-
isAllASCII
protected static boolean isAllASCII(String input)
to check if a string only contains US-ASCII characters
-
-