content: package com.alibaba.excel.util;
  
  import java.util.regex.Pattern;
  
  /**
   * @author jipengfei
   */
  public class PositionUtils {
  
      private static final Pattern CELL_REF_PATTERN = Pattern.compile("(\\$?[A-Z]+)?" + "(\\$?[0-9]+)?",
          Pattern.CASE_INSENSITIVE);
      private static final char SHEET_NAME_DELIMITER = '!';
      private static final char REDUNDANT_CHARACTERS = '$';
  
      private PositionUtils() {}
  
      public static int getRowByRowTagt(String rowTagt, Integer before) {
          int row;
          if (rowTagt != null) {
              row = Integer.parseInt(rowTagt) - 1;
              return row;
          } else {
              if (before == null) {
                  before = -1;
              }
              return before + 1;
          }
      }
  
      public static int getRow(String currentCellIndex) {
          if (currentCellIndex == null) {
              return -1;
          }
          int firstNumber = currentCellIndex.length() - 1;
          for (; firstNumber >= 0; firstNumber--) {
              char c = currentCellIndex.charAt(firstNumber);
              if (c < '0' || c > '9') {
                  break;
              }
          }
          return Integer.parseUnsignedInt(currentCellIndex.substring(firstNumber + 1)) - 1;
      }
  
      public static int getCol(String currentCellIndex, Integer before) {
          if (currentCellIndex == null) {
              if (before == null) {
                  before = -1;
              }
              return before + 1;
          }
          int firstNumber = currentCellIndex.charAt(0) == REDUNDANT_CHARACTERS ? 1 : 0;
          int col = 0;
          for (; firstNumber < currentCellIndex.length(); firstNumber++) {
              char c = currentCellIndex.charAt(firstNumber);
              boolean isNotLetter = c == REDUNDANT_CHARACTERS || (c >= '0' && c <= '9');
              if (isNotLetter) {
                  break;
              }
              col = col * 26 + Character.toUpperCase(c) - 'A' + 1;
          }
          return col - 1;
      }
  
  }
  