Giter VIP home page Giter VIP logo

niesfisch / tokenreplacer Goto Github PK

View Code? Open in Web Editor NEW
13.0 3.0 7.0 131 KB

Token Replacer is a simple and small Java Library that helps replacing tokens in strings. You can replace the tokens with static values or create values "on-the-fly" by calling a generator. You can even pass arguments to the generator which makes it pretty powerful.

Home Page: www.marcel-sauer.de

License: Other

Java 100.00%
java tokenizer generator regex replacement

tokenreplacer's Introduction

What's that for?

Token Replacer is a simple and small Java Library that helps replacing tokens in strings.

You can replace tokens with simple static strings:

String toReplace = "i can count to {number}";
String result = new Toky().register("number", "123").substitute(toReplace);
System.out.println(result); // i can count to 123

or strings generated "on-the-fly":

String toReplace = "i can count to {number}";
String result = new Toky().register(new Token("number").replacedBy(new Generator() {
    
	@Override
	public void inject(String[] args) {
	    // store the arguments
	}

	@Override
	public String generate() {
	    return "123"; // some very sophisticated stuff happens here :), we just return 123 to keep it simple
	}
})).substitute(toReplace);
System.out.println(result); // i can count to 123

You can even pass arguments to the generator which makes it pretty powerful:

String toReplace = "i can count to {number(1,2,3)}";
String result = new Toky().register(new Token("number").replacedBy(new Generator() {
    
	@Override
	public void inject(String[] args) {
	    // store the arguments
	}

	@Override
	public String generate() {
	    return args[0] + args[1] + args[2]; // some very sophisticated stuff happens here :)
	}
})).substitute(toReplace);
System.out.println(result); // i can count to 123

If you prefer to use index based tokens, you can also use this:

toky.register(new String[] { "one", "two", "three" });
toky.substitute("abc {0} {1} {2} def"); // will produce "abc one two three def";

Getting the Jar File

via Maven:

<dependency>
    <groupId>de.marcelsauer</groupId>
    <artifactId>tokenreplacer</artifactId>
    <version>1.3.2</version>
</dependency>

or just take the latest "tokenreplacer-x.y.jar" from the downloads section and put it in your classpath. If you also need the sources and javadoc download the "tokenreplacer-x.y-sources.jar" / "tokenreplacer-x.y-javadoc.jar".

Licence

Version >= 1.2 -> Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0.txt

Version <= 1.1 -> GPL 3

Release Notes

Release Notes

Usage

simplest use case, only static values

TokenReplacer toky = new Toky().register("number", "123");
toky.substitute("i can count to {number}");

is same as registering an explicit {@link Token}

toky = new Toky().register(new Token("number").replacedBy("123"));
toky.substitute("i can count to {number}");

we can also use a {@link Generator} to dynamically get the value (which here does not really make sense ;-))

toky = new Toky().register(new Token("number").replacedBy(new Generator() {

	 @Override
	 public void inject(String[] args) {
	     // not relevant here
	 }

	 @Override
	 public String generate() {
	     return "123";
	 }
}));

here we use a generator and pass the arguments "a,b,c" to it, they will be injected via {@link Generator#inject(String[] args)} before the call to {@link Generator#generate()} is done. it is up to the generator to decide what to do with them. this feature makes handling tokens pretty powerful because you can write very dynamic generators.

toky.substitute("i can count to {number(a,b,c)}");

if you prefer to use index based tokens, you can also use this:

toky.register(new String[] { "one", "two", "three" });
toky.substitute("abc {0} {1} {2} def"); // will produce "abc one two three def";

of course you can replace all default delimiters with your preferred ones, just make sure start and end are different.

toky.withTokenStart("*"); // default is '{'
toky.withTokenEnd("#"); // default is '}'
toky.withArgumentDelimiter(";"); // default is ','
toky.withArgumentStart("["); // default is '('
toky.withArgumentEnd("]"); // default is ')'

by default Toky will throw IllegalStateExceptions if there was no matching value or generator found for a token. you can enable/disable generating exceptions.

toky.doNotIgnoreMissingValues(); // which is the DEFAULT

will turn error reporting for missing values OFF

toky.ignoreMissingValues();

you can enable/disable generator caching. if you enable caching once a generator for a token returned a value this value will be used for all subsequent tokens with the same name

toky.enableGeneratorCaching();
toky.disableGeneratorCaching();

More Samples

Have a look at the unit test of Toky to see some more samples

peeking into the source code and building from scratch

$ git clone http://github.com/niesfisch/tokenreplacer.git tokenreplacer
$ cd tokenreplacer
$ mvn clean install

tokenreplacer's People

Contributors

janriemer avatar niesfisch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

tokenreplacer's Issues

FR-2 Allow arbitrary (unknown) tokens to be replaced by callback

sometimes you have a string with tokens that are not known until runtime.

e.g.

some text with a ${token} and ${anotherOne} and ${anotherOne}.

as a developer i want to be able to register a callback which gets called for every token that is found.

so the callback would be called for

callback.replaceToken("token")
callback.replaceToken("anotherOne")
callback.replaceToken("anotherOne")

and so on

:)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.