package yu_strings

import (
	"strings"
)

// Is09
//
//	@Description: 判断字符串是否全为数字
func Is09(s string) bool {
	for _, j_ascii := range s {
		if j_ascii < 48 || j_ascii > 57 {
			return false
		}
	}
	return len(s) > 0
}

// Isaz
//
//	@Description: 判断字符串是否全为小写字母
func Isaz(s string) bool {
	for _, j_ascii := range s {
		if j_ascii < 97 || j_ascii > 122 {
			return false
		}
	}
	return len(s) > 0
}

// IsAZ
//
//	@Description: 判断字符串是否全为大写字母
func IsAZ(s string) bool {
	for _, j_ascii := range s {
		if j_ascii < 65 || j_ascii > 90 {
			return false
		}
	}
	return len(s) > 0
}

// IsaZ
//
//	@Description: 判断字符串是否全为字母，不区分大小写
func IsaZ(s string) bool {
	for _, j_ascii := range s {
		if (j_ascii < 65 || j_ascii > 90) && (j_ascii < 97 || j_ascii > 122) {
			return false
		}
	}
	return len(s) > 0
}

// Is0aZ
//
//	@Description: 判断字符串是否全为数字和字母的组合
func Is0aZ(s string) bool {
	for _, j_ascii := range s {
		if (j_ascii < 48 || j_ascii > 57) && (j_ascii < 65 || j_ascii > 90) && (j_ascii < 97 || j_ascii > 122) {
			return false
		}
	}
	return len(s) > 0
}

// IsEx
//
//	@Description: 判断字符串是否单字节字符
func IsEx(s string) bool {
	for _, j_ascii := range s {
		if j_ascii < 33 || j_ascii > 126 {
			return false
		}
	}
	return len(s) > 0
}

// Get09
//
//	@Description: 提取字符串中的纯数字
func Get09(s string) string {
	j_buf := make([]byte, 0, len(s))
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= 48 && s[j_i] <= 57 {
			j_buf = append(j_buf, s[j_i])
		}
	}
	return string(j_buf)
}

// Get09s
//
//	@Description: 提取字符串中的纯数字数组
func Get09s(s string) []string {
	j_buf := make([]byte, 0, len(s))
	j_arr := make([]string, 0, len(s))
	for j_i := 0; j_i < len(s); j_i++ {
		if s[j_i] >= 48 && s[j_i] <= 57 {
			j_buf = append(j_buf, s[j_i])
			continue
		}
		if len(j_buf) > 0 {
			j_arr = append(j_arr, string(j_buf))
			j_buf = make([]byte, 0, len(s))
		}
	}
	if len(j_buf) > 0 {
		j_arr = append(j_arr, string(j_buf))
		j_buf = make([]byte, 0, len(s))
	}
	return j_arr
}

// Sub
//
//	@Description: 取数据中间
//	@param str 欲寻找的数据
//	@param left 欲寻找的左边数据
//	@param right 欲寻找的右边数据
//	@return string 寻找到的结果，如：
//
//	Sub("1234567896789","3","7")
//	->
//	"456"
func Sub(str, left, right string) string {
	j_l := strings.Index(str, left)
	if j_l == -1 {
		return ""
	}
	j_l += len(left)
	j_r := strings.Index(str[j_l:], right)
	if j_r == -1 {
		return ""
	}
	return str[j_l : j_l+j_r]
}

// Left
//
//	@Description: 取数据左边
//	@param str 欲寻找的数据
//	@param right 欲寻找的右边数据
//	@return []byte 寻找到的结果，如：
//
//	Left("1234567896789","67")
//	->
//	"12345"
func Left(str, right string) string {
	j_r := strings.Index(str, right)
	if j_r == -1 {
		return ""
	}
	return str[:j_r]
}

// Right
//
//	@Description: 取数据右边
//	@param str 欲寻找的数据
//	@param left 欲寻找的左边数据
//	@return string 寻找到的结果，如：
//
//	Right("1234567896789","67")
//	->
//	"896789"
func Right(str, left string) string {
	j_l := strings.Index(str, left)
	if j_l == -1 {
		return ""
	}
	return str[j_l+len(left):]
}

// EmptyLeft
//
//	@Description: 删除字符串中的左边空格
//	@param str 欲处理的数据
//	@return string 处理后的数据，如：
//
//	EmptyLeft("\r\n\t  15151 \t  ")
//	->
//	"15151 \t  "
func EmptyLeft(str string) string {
	j_len := len(str)
	for j_i := 0; j_i < j_len; j_i++ {
		if str[j_i] != 32 && str[j_i] != 13 && str[j_i] != 10 && str[j_i] != 9 {
			return str[j_i:]
		}
	}
	return ""
}

// EmptyRight
//
//	@Description: 删除字符串中的右边空格
//	@param str 欲处理的数据
//	@return string 处理后的数据，如：
//
//	EmptyRight(" \t 15151  \t \r\n")
//	->
//	" \t 15151"
func EmptyRight(str string) string {
	j_len := len(str)
	for j_len > 0 {
		j_len--
		if str[j_len] != 32 && str[j_len] != 13 && str[j_len] != 10 && str[j_len] != 9 {
			return str[:j_len+1]
		}
	}
	return ""
}

// Empty
//
//	@Description: 删除字符串中的左右边空格
//	@param str 欲处理的数据
//	@return string 处理后的数据，如：
//
//	Empty("\r\n \t 15151   \t\r\n")
//	->
//	"15151"
func Empty(str string) string {
	return EmptyRight(EmptyLeft(str))
}

// EmptyAll
//
//	@Description: 删除字符串中的所有的空字符(空格、换行、tab、空字符)
//	@param str 欲处理的数据
//	@return string 处理后的数据，如：
//
//	Empty("\r\n \t 15151   \t\r\n")
//	->
//	"15151"
func EmptyAll(str string) string {
	j_buf := make([]byte, 0, len(str))
	for j_i := 0; j_i < len(str); j_i++ {
		if str[j_i] == 32 {
			continue
		}
		if str[j_i] == 13 || str[j_i] == 10 {
			continue
		}
		if str[j_i] == '\t' {
			continue
		}
		if str[j_i] == '\x00' {
			continue
		}
		j_buf = append(j_buf, str[j_i])
	}
	return string(j_buf)
}
