StackUtils.java
package com.github.mygreen.cellformatter.tokenizer;
import java.util.LinkedList;
import com.github.mygreen.cellformatter.lang.ArgUtils;
/**
* {@link LinkedList}に対するユーティリティクラス。
* @author T.TSUCHIE
*
*/
public class StackUtils {
/**
* スタックの最後の要素(一番下の要素)が引数で指定した文字列と等しいかどうか比較する。
* @param stack
* @param str 比較対象の文字列
* @return
*/
public static boolean equalsBottomElement(final LinkedList<String> stack, final String str) {
if(stack.isEmpty()) {
return false;
}
return stack.peekLast().equals(str);
}
/**
* スタックの最後の要素(一番下の要素)が引数で指定した文字列の何れかと等しいかどうか比較する。
* @param stack
* @param strs
* @return
*/
public static boolean equalsAnyBottomElement(final LinkedList<String> stack, final String[] strs) {
ArgUtils.notNull(stack, "stack");
ArgUtils.notEmpty(strs, "strs");
if(stack.isEmpty()) {
return false;
}
final String bottom = stack.peekLast();
for(String str : strs) {
if(str.equals(bottom)) {
return true;
}
}
return false;
}
/**
* スタックの先頭の要素(一番上の要素)が引数で指定した文字列と等しいかどうか比較する。
* @param stack
* @param str 比較対象の文字列
* @return
*/
public static boolean equalsTopElement(final LinkedList<String> stack, final String str) {
if(stack.isEmpty()) {
return false;
}
return stack.peekFirst().equals(str);
}
/**
* スタックの先頭の要素(一番上の要素)が引数で指定した文字列の何れかと等しいかどうか比較する。
* @param stack
* @param strs 比較する文字列の配列
* @return
*/
public static boolean equalsAnyTopElement(final LinkedList<String> stack, final String[] strs) {
ArgUtils.notNull(stack, "stack");
ArgUtils.notEmpty(strs, "strs");
if(stack.isEmpty()) {
return false;
}
final String top = stack.peekFirst();
for(String str : strs) {
if(str.equals(top)) {
return true;
}
}
return false;
}
/**
* スタックの値を取り出し、文字列として結合する。
* @param stack
* @return
*/
public static String popupAndConcat(final LinkedList<String> stack) {
StringBuilder value = new StringBuilder();
while(!stack.isEmpty()) {
value.append(stack.pollLast());
}
return value.toString();
}
/**
* スタックから先頭の値を取り出す。
* @param stack
* @return スタックが空の場合は空文字を返す。
*/
public static String popup(final LinkedList<String> stack) {
if(stack.isEmpty()) {
return "";
}
return stack.pollFirst();
}
}