Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/**
 * Copyright 2000-2006 DFKI GmbH.
 * All Rights Reserved.  Use is subject to license terms.
 * <p/>
 * This file is part of MARY TTS.
 * <p/>
 * MARY TTS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, version 3 of the License.
 * <p/>
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 * <p/>
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

public class Main {
    public static int romanToInt(String romanNumber) {
        if (!romanNumber.matches("[IVXLCDM]+")) {
            // Not a roman number
            throw new NumberFormatException("Not a roman number: " + romanNumber);
        }

        String num = "IVXLCDM";
        int[] value = { 1, 5, 10, 50, 100, 500, 1000 };
        int sum = 0;
        for (int i = romanNumber.length() - 1; i >= 0;) {
            int posR = num.indexOf(romanNumber.charAt(i));
            if (i > 0) {
                int posL = num.indexOf(romanNumber.charAt(i - 1));
                if (posR <= posL) {
                    sum += value[posR];
                    i--;
                } else {
                    sum += value[posR] - value[posL];
                    i -= 2;
                }
            } else { // i==0
                sum += value[posR];
                i--;
            }
        }
        // So now <code>sum</code> is the resulting number.
        return sum;
    }

    /**
     * Check if bytes contains a subsequence identical with pattern,
     * and return the index position.
     * Assumes that pattern.length ^&lt; bytes.length.
     *
     * @param bytes
     * @param pattern
     * @return the index position in bytes where pattern starts, or -1 if bytes
     * does not contain pattern.
     */
    public static int indexOf(byte[] bytes, byte[] pattern) {
        if (bytes == null || pattern == null || bytes.length < pattern.length || pattern.length == 0) {
            return -1;
        }
        int j = 0; // index in pattern
        int start = -1;
        for (int i = 0; i < bytes.length; i++) {
            if (bytes[i] == pattern[j]) {
                if (j == 0)
                    start = i;
                j++;
                if (j == pattern.length)
                    return start; // found it!
            } else {
                j = 0;
                start = -1;
            }
        }
        return -1;
    }
}